Python基础 Python中的基本数据类型

除了常规的字符串和数值类型之外,Python还提供了另外4种重要的基本数据类型:元组、列表、集合和字典。这4中类型有许多共同点,因为它们都允许在一个名称下面组织多条数据。因为具有这种组织性,每个类型都允许在它们中查找元素。

元组——不可更改的数据序列

元组是Python中定义的一种基本数据类型。在创建的时候就可以识别出元组,因为它们被圆括号包围:
元组包含对数据的引用,例如对字符串和数值的引用,元组中的数据不可更改。然而,虽然它们引用数据,但是仍然是可以像其他类型的数据一样为它们命名:

1
2
3
filler=("string","filled","by a","tuple")
print("A %s %s %s %s" % ("string","filled","by a","tuple"))
A string filled by a tuple

如果直接用print()函数调用元组,打印其结果,则:

1
2
3
filler=("string","filled","by a","tuple")
print(filler)
('string','filled','by a','tuple')

filler元组的处理方式好像是它的元素都呈现处理并且被字符串用来填充格式说明符,因为元组的处理方式就好像输入一个序列来满足给定的格式规范。也可以访问元组中的单个值。每个元素引用的值可以通过该语言的解除引用特征性直接访问。通过在元组的名称后放置方括号并且从0起计算要引用的元素的位置,可以解除元组中对值的引用。如:

1
2
3
4
5
6
7
a=("first","second","third")
print("The first element of the tuple is %s" % a[0])
The first element of the tuple is first
print("%d" % len(a))
3
print(a[len(a)-1])
third

并且,可以通过一个元组访问另外一个元组,如:

1
2
3
4
5
6
a=("first","second","third")
b=(a,"b's second element")
print("%s" b[1])
b's second element
print("%s" % b[0][0])
first

值得注意的是,元组可以各种类型的数据,但在创建之后,就不能再改变。 元组之所以不可变,是因为Python中使用元组存储一组有序的事物,这些事物在使用时是不可以更改的。如果尝试修改元组中的元素将导致Python报错。

列表——可以更改的数据序列

列表和元组很像,是包含从0开始引用的元素的序列。列表用方括号创建:

1
breakfast=["coffee","tea","toast","egg"]

列表中的单个元素的访问方法与元组类似。像元组一样,列表中的元素从0开始引用,并且访问顺序也是从0开始知道末端。

1
2
3
count=0
print("Today's breakfast is %s " % breakfast[count])
Today's breakfast is coffee

当顺序访问列表中的多个元素时,有必要使用一个名称来存储目前在列表中所处的位置。使用列表与使用元组主要的区别在于, 元组在创建后不可以修改,列表在任何时刻都可以被修改:

1
2
3
breakfast[count]="sausages"
print("Today's breakfast is %s " % breakfast[count]")
Today's breakfast is sausages

除了直接修改列表中已经存在的元素,还可以向列表中添加需要的元素。可以用列表类型的内置方法append向列表末端添加元素。利用append方法每次只能添加一个元素。如果希望一次性地向列表末端添加多个元素,如一个列表或元组中的内容,可以使用extend方法。

1
2
3
breakfast.extend(["juice","decaf","oatmeal"])
print(breakfast)
['sausages','tea','toast','egg','waffle','juice','decaf','oatmeal']

列表的长度也是通过len函数确定。就像元组一样,长度从1开始,而列表的第一个元素的位置从0开始。

字典——以名称索引的分组数据

字典类似于列表和元组。它是包含一组数据的另外一种容器。然而,元组和列表以数字顺序索引,字典却用选择的名称索引。这些名称可以是字母、数值、字符串或者符号。

1
2
3
4
menus_specials={}
menus_specials["breakfast"]="Canadian ham"
menus_specials["lunch"]="Tuna surprise"
menus_specials["dinner"]="Cheeseburger Deluxe"

上述代码可以创建一个字典,字典一旦被定义并且通过名称引用,将开始使用如下方式对其实例化:将希望作为索引的名称放在方括号内,将通过该索引引用的值放在等号的右端。其中,索引和值都有特殊的名称。 字典中索引的名称叫做键,对应的值叫做值。 为了创建一个完全指定(或者可以认为它是完全形成的)字典,必须在花括号之间指定每个键以及和它对应的值,并以冒号分隔它们,如:

1
menus_specials={"breakfast":"sausage and eggs","lunch":"split pea soup and garlic bread","dinner":"2 hot dogs and onion rings"}

要打印出某个字典中所有的键与值,只需将该字典的名称作为print()函数的参数,同样地,可以将键放在方括号中。如果键是字符串,需要将键在引号中。如果键是数值,则使用数值引用即可。

1
2
3
4
5
6
print(munus_specials)
{'breakfast':'sausage and eggs','lunch':'split pea soup and garlic bread','dinner':'2 hot dogs and onion rings'}
print("%s " % menu_specials["breakfast"])
sausage and eggs
print("%s " % menu_specials["dinner"])
2 hot dogs and onion rings

如果键是一个字符串,但是在方括号中意外地没有将键放在引号中,Python就试图将它看做一个名称,需要解除对它的引用来找到键。一般情况下,会引起一个NameError异常,除非凑巧找到了一个与该字符串相同的名称,这时会得到一个IndexError错误。
可以使用keys方法查看字典中的所有键,以便用户查找所需的键,同样地,可以使用values方法查看所有的值。

1
2
3
4
5
6
7
8
9
10
hungry=menus_specials.keys()
print(list(hungry))
breakfast
lunch
dinner
starving=menus_specials.value()
print(list(starving))
sausage and eggs
split pea soup and garlic bread
2 hot dogs and onion rings

Python中允许不同的键对应相同的值,但是,当重复定义相同的键时,虽然不会报错,但也存在下述错误:

1
2
3
menus2={"breakfast":"spam","breakfast":"ham"}
menus2.get("breakfast")
'ham'

集合

在Python中,集合与字典类似,只是它包含键,而没有与键相关联的值。本质上,集合是不包括重复数据的数据集,从数据集删除重复数据时,集合非常实用。Python中有两种类型的集合:可变集合与不可变集合。两种的不同之处在于,对于可变集合,可以增加、删除或者改变它的元素,而不可变集合中的元素在它们被初始设定之后就不能再被更改。

1
2
3
4
5
alphabet=['a','b','b','c','a','d','e']
print(alphabet)
['a','b','b','c','a','d','e']
alph2=set(alphabet)
{'a','c','b','e','d'}

上述例子中数据集alphabet作为输入,并将其转换为一个集合。因为集合不允许重复的值,多余的字符a和b被删除。

小结

元组 是从0开始以固定数值顺序索引的一个数据序列。元组中的引用在元组被创建后不能被修改,也不能再添加或者删除元素。然而,如果元组包含可变元素的数据类型,该数据类型的元素是可以改变的。
列表 是另一种序列,处理它的元素可以被修改之外,它与元组类似。列表的长度可以改变,以容纳使用append方法新增加的元素,另外也可以通过pop方法缩减列表的长度。
字典 是另外一种有索引的数据分组。列表和元组以数值为索引,而字典通过所选的值索引。如果想研究这些索引(键),可以使用keys方法。为了研究被引用的数据(值),可以使用values方法。
集合 是项集,不允许包含重复的值。理论上,它们与字典类似,不过它们只包含键,而没有与键相关联的值。集合的一个用途是从数据集中取出冗余的值。

1