来源:https://docs.python.org/3.6/tutorial/datastructures.html#the-del-statement
1.del
声明
有一种方法可以从列表中删除一个项目,而不是它的值:del
语句。这与pop()
返回值的方法不同。该del
语句还可用于从列表中删除切片或清除整个列表(我们之前通过将空列表分配给切片来执行此操作)。例如:
>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]
del
也可以用来删除整个变量:
>>> del a
2.元组和序列
我们看到列表和字符串有许多常见属性,例如索引和切片操作。它们是序列数据类型的两个示例(请参阅 序列类型 - 列表,元组,范围)。由于Python是一种不断发展的语言,因此可能会添加其他序列数据类型。还有另一种标准序列数据类型: 元组。
元组由逗号分隔的多个值组成,例如:
>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
>>> # Tuples are immutable:
... t[0] = 88888
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> # but they can contain mutable objects:
... v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])
如您所见,输出元组始终用括号括起来,以便正确解释嵌套元组; 它们可以输入有或没有周围的括号,尽管通常括号是必要的(如果元组是较大表达式的一部分)。无法分配元组的各个项,但是可以创建包含可变对象的元组,例如列表。
尽管元组看起来与列表类似,但它们通常用于不同的情况并用于不同的目的。元组是不可变的,并且通常包含异构的元素序列,这些元素可以通过解包(参见本节后面部分)或索引(或者甚至是属性的情况下namedtuples
)来访问。列表是可变的,它们的元素通常是同类的,可以通过遍历列表来访问。
一个特殊的问题是构造包含0或1项的元组:语法有一些额外的怪癖来适应这些。空元组是由一对空括号构成的; 通过使用逗号跟随值来构造具有一个项目的元组(在括号中包含单个值是不够的)。丑陋但有效。例如:
>>> empty = ()
>>> singleton = 'hello', # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)
该语句是元组打包的一个例子:值,并在元组中打包在一起。反向操作也是可能的:t = 12345, 54321,'hello!'
12345
54321
'hello!'
>>> x, y, z = t
这足够恰当地称为序列解包,适用于右侧的任何序列。序列解包需要在等号左侧有尽可能多的变量,因为序列中有元素。请注意,多重赋值实际上只是元组打包和序列解包的组合。
3.集合
Python还包括集合的数据类型。集合是无序集合,没有重复元素。基本用途包括成员资格测试和消除重复条目。集合对象还支持数学运算,如并集,交集,差异和对称差异。
大括号或set()
函数可用于创建集合。注意:要创建一个空集,你必须使用set()
,而不是{}
; 后者创建一个空字典
这是一个简短的演示:
>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket) # show that duplicates have been removed
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket # fast membership testing
True
>>> 'crabgrass' in basket
False
>>> # Demonstrate set operations on unique letters from two words
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a # unique letters in a
{'a', 'r', 'b', 'c', 'd'}
>>> a - b # letters in a but not in b
{'r', 'd', 'b'}
>>> a | b # letters in a or b or both
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b # letters in both a and b
{'a', 'c'}
>>> a ^ b # letters in a or b but not both
{'r', 'd', 'b', 'm', 'z', 'l'}
与列表推导类似,也支持集合理解:
>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}
4.字典
Python内置的另一个有用的数据类型是字典。词典有时在其他语言中被称为“关联记忆”或“关联阵列”。与通过一系列数字索引的序列不同,字典由键索引,键可以是任何不可变类型; 字符串和数字总是键。如果元组仅包含字符串,数字或元组,则它们可用作键; 如果元组直接或间接包含任何可变对象,则不能将其用作键。你不能用链表做关键字,因为链表可以用索引赋值,切片赋值,或类似的方法进行修改append()
和extend()
。
最好将字典视为一组无序的键:值对,并要求键是唯一的(在一个字典中)。一对大括号创建一个空字典:{}
。在括号内放置以逗号分隔的键:值对列表,将初始键:值对添加到字典中; 这也是字典在输出上的写法。
字典上的主要操作是使用某个键存储值并提取给定键的值。也可以删除键:值对del
。如果使用已在使用的密钥进行存储,则会忘记与该密钥关联的旧值。使用不存在的密钥提取值是错误的。
list(d.keys())
对字典执行会以任意顺序返回字典中使用的所有键的列表(如果您希望对其进行排序,则只需使用它 sorted(d.keys())
)。要检查单个键是否在字典中,请使用in
关键字。
这是一个使用字典的小例子:
>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'guido': 4127, 'irv': 4127, 'jack': 4098}
>>> list(tel.keys())
['irv', 'guido', 'jack']
>>> sorted(tel.keys())
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False
的dict()
构造直接从键-值对的序列构建字典:
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127}
此外,dict comprehensions可用于从任意键和值表达式创建字典:
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}
当键是简单字符串时,有时使用关键字参数指定对更容易:
>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'jack': 4098, 'guido': 4127}