Python 3.6 学习--基础6:数据结构--del声明,元组和序列,集合,字典

来源: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!'1234554321'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}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值