容器¶
在某一点上,您可能希望将字符串或数字等对象保留在另一个对象中,以显示它们之间的强关联。这些包含其他对象的对象被调用 容器 .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'
通用操作¶
长度¶
有时,您对容器所容纳的对象的数量感兴趣。可以使用 len()
功能:
>>> x = [1, 2, 3]
>>> len(x)
3
>>> x = (1, 2)
>>> len(x)
2
>>> x = set([1, 2, 2, 3, 3, 'three'])
>>> len(x)
4
>>> x = {'One': 1, 'two': 2, 'THREE': ['A', 'list', 'of', 'strings']}
>>> len(x)
3
会员资格检查¶
>>> x = [1, 2, 3]
>>> 2 in x
True
注解
当行为明确时 lists
, tuples
和 sets
, the in
检查A的钥匙 dictionary
.
>>> x = {
... 'one': 'two',
... 3: 4
... }
>>> 'one' in x
True
>>> 'two' in x
False
>>> 3 not in x
False
>>> 4 not in x
True
由于实现的性质,成员检查在 sets
和 dictionaries