容器

在某一点上,您可能希望将字符串或数字等对象保留在另一个对象中,以显示它们之间的强关联。这些包含其他对象的对象被调用 容器 .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 .实际上,钥匙通常是 intsstrings .如果要检索不存在的内容,将引发错误:

>>> 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

注解

当行为明确时 liststuplessets , 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

由于实现的性质,成员检查在 setsdictionaries

总结

  • 使用 lists 如果订单很重要,您可能需要修改容器。

  • 使用 tuples 如果订单很重要并且容器是固定的。

  • 使用 sets 如果订单不重要,并且您希望确保容器内的唯一性。

  • 使用 dictionaries 如果要存储键值对。