货柜¶
在某一点上,您可能希望将字符串或数字等对象保留在另一个对象中,以表明它们是强相关的。这些包含其他对象的对象称为 集装箱 。Python提供了相当多的开箱即用的有用容器,下面将介绍其中一些容器。
列表¶
如果您需要一个灵活的容器,该容器可以容纳任何东西(甚至它本身),并且您需要保持所包含对象的顺序,则应该使用 list
。空列表由以下任一项生成
>>> list()
[]
或
>>> []
[]
或者生成一个非空列表
>>> list([1, 2, 3])
[1, 2, 3]
或
>>> [1, 2, 3]
[1, 2, 3]
访问列表的值如下所示:
>>> x = [1, 2, 3]
>>> print(x[1])
2
注解
正如您在上面的示例中看到的,指定 x[1]
没有给你列表的第一个元素,而是第二个元素。这是因为Python从0开始索引!
使用此选项,您还可以更改列表中的值
>>> x = [1, 2, 3]
>>> x[1] = 4
>>> print(x)
[1, 4, 3]
负索引可用于从末尾检索元素:
>>> x = [1, 2, 3, 4, 5]
>>> print(x[-1])
5
>>> print(x[-2])
4
您还可以使用以下表示法创建列表的切片:
list[start:end:step]
它的用法最好用一些例子来说明:
>>> x = ['zero', 'one', 'two', 'three', 'four']
>>> print(x[2:])
['two', 'three', 'four']
>>> print(x[:3])
['zero', 'one', 'two']
>>> print(x[1:3])
['one', 'two']
>>> print(x[::2])
['zero', 'two', 'four']
>>> print(x[::-1])
['four', 'three', 'two', 'one', 'zero']
>>> print(x[-2:])
['three', 'four']
您还可以将值追加到列表中
>>> x = [1, 2, 3]
>>> print(x)
[1, 2, 3]
>>> x.append(4)
>>> print(x)
[1, 2, 3, 4]
或在指定位置插入值
>>> x = [1, 2, 3]
>>> print(x)
[1, 2, 3]
>>> x.insert(0, -1)
>>> print(x)
[-1, 1, 2, 3]
>>> x.insert(1, 0)
>>> print(x)
[-1, 0, 1, 2, 3]
列表可以容纳任何内容,甚至其他列表
>>> [1, 'two', ['three', 4]]
[1, 'two', ['three', 4]]
元组¶
如果您确定不希望在数据容器生成后对其进行修改,并且希望将所有内容保持在您指定的 tuple
容器是首选的容器。它们可以通过以下方式初始化
>>> tuple([1, 2, 3])
(1, 2, 3)
>>> (1, 2, 3)
(1, 2, 3)
访问单个元素的过程与列表中的操作类似:
>>> x = (1, 2, 3)
>>> print(x[1])
2
当您尝试修改它们时,会引发错误:
>>> x = (1, 2, 3)
>>> x[1] = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
集合¶
如果您不希望容器中有重复项,并且不关心它们的顺序,则应该使用 set
。它们通过以下方式初始化
>>> set() # This one is empty
set()
>>> set([1, 2, 2, 3, 3, 'three'])
{1, 2, 3, 'three'}
>>> {1, 2, 2, 3, 3, 'three'}
{1, 'three', 2, 3}
并且可以按如下方式添加元素:
>>> x = {1, 2, 3}
>>> print(x)
{1, 2, 3}
>>> x.add('four')
>>> print(x)
{1, 2, 'four', 3}
Sets
此外,还支持许多您在 set in mathematics 。有关详细信息,请参阅Python文档。
词典¶
如果您不想保持事物的顺序,但更愿意使用键来访问容器中的对象,则 dict
已经帮你掩护好了。 Dicts
通过以下方式初始化
>>> dict()
{}
>>> {}
{}
>>> x = {'One': 1, 'two': 2, 'THREE': ['A', 'list', 'of', 'strings']}
{'THREE': ['A', 'list', 'of', 'strings'], 'One': 1, 'two': 2}
它们的值可以这样访问:
>>> x = {'One': 1, 'two': 2, 'THREE': ['A', 'list', 'of', 'strings']}
>>> x['One']
1
>>> x['THREE']
['A', 'list', 'of', 'strings']
如您所见,对于每个键所指向的值的类型没有限制。另一方面,钥匙必须是 hashable 。实际上,密钥通常是 ints
或 strings
。如果要检索不存在的内容,则会引发错误:
>>> x = {'One': 1, 'two': 2, 'THREE': ['A', 'list', 'of', 'strings']}
>>> x['four']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'four'
在字典中不存在键的情况下提供后备的一种方法是 dict.get()
方法:
>>> x = {'One': 1, 'two': 2, 'THREE': ['A', 'list', 'of', 'strings']}
>>> x.get('two', 'fallback')
2
>>> x.get('four', 'fallback')
'fallback'