赞
踩
元组时一种固定长度、不可变的Python对象创建。创建元组最简单的方法就是用逗号分隔序列值。
tup=4,5,6
当通过复杂的表达式来定义元组时,通常需要用括号将值包起来。
nest_tup=(4,5,6),(7,8)
也可以使用tuple函数将任意序列或迭代器转换为元组:
tuple([4,0,2])
虽然对象元组中存储的对象其自身说可变的,但是元组一旦创建,各个位置上的对象时无法被修改的。
如果一个元组中的一个对象是可变的,可通过append()函数
tup[1].append(3)
可以使用+号连接元组来生成更长的元组。将元组乘以整数,则会和列表一样,生成含有多份拷贝的元组。在这个过程中,对象自身并没有被复制,只是值相它们的引用进行了复制。
与元组不同,列表的长度是可以变化的,它所包含的内容也是可以修改的。可以使用[]或者list类型函数定义列表。
list=[2,3,7,None]
tup=('foo','bar','baz')
list1=list(tup)
列表与元组非常相似,它们很多函数用法是相似的。list函数在数据处理中常用于将迭代器或者生成器转化为列表。
可以通过append()方法将元素添加到列表的尾部,也可以使用insert()方法将元素插入到指定的列表位置,其中,插入位置的范围在0到列表长度之间。
insert与append相比,计算代价更高。因为子序列元素不得不在内部移动为新元素提供空间。当需要在序列的头部或者尾部都插入元素,可以选择双端队列collections.deque。
insert的反操作为pop,该操作会将特定位置的元素移除并返回。元素也可以用remove方法移除,该方法会订为第一个符合要求的值并进行移除。
可以使用in关键字检查一个值是否在列表中,用not关键字检查一个字是不是不在列表中,最终返回布尔属性的值。
与字典、集合相比,检查列表中是否包含一个值是非常缓慢的,因为Python在列表中进行了线性逐个扫描,而在字典和集合中Python是同时检查所有元素的。
可以调用sort()函数对列表内部进行排序。
针对列表的切片,使用切片符号可以对大多数序列类型选取其子集,它的基本形式是将start:stop传入到索引符号[]中:
seq=[7,2,3,7,5,6,0,1]
seq[1:5]
输出[2,3,7,5]
由于起始位置start的索引是包含的,而结束位置stop的索引是不包含的,因此元素的数量是stop-start。当start与stop省略时,会话会默认传入序列的起始位置或结束位置。负索引可以从序列的尾部进行索引:
seq[-4:]
输出[5,6,0,1]
步进值step可以在两个冒号后使用,意思就是每隔多少个数取一个值。
当需要对列表或者元组进行翻转时,可以选用步进值为-1:
seq[::-1]
输出[1,0,6,5,3,6,3,2,7]
enumerate函数适用于需要遍历一个序列的同时追踪当前元素的索引。
- for i,value in enumerate(co;;ection):
- #使用值做点事
当需要队数据建立索引时,可以使用enmerate构造一个字典,将序列值映射到索引位置上
- list=['foo','bar','baz']
- mapping={}
- for i,v in enumerate(list):
- mapping[v]=i
输出
mapping
{'foo': 0, 'bar': 1, 'baz': 2}
使用sorted函数返回一个根据任意序列中的元素新建的已排序列表,sorted函数接受的参数与列表的sort方法一致。
zip将列表、元组或其他序列的元素匹配,新建一个元组构建的列表
- seq1=['foo','bar','baz']
- seq2=['onr','two','three']
- zipped=zip(seq1,seq2)
输出
list(zipped)
[('foo', 'onr'), ('bar', 'two'), ('baz', 'three')]
zip可以处理任意长度的序列,他声称列表长度由最短的序列决定。zip的常用场景为同时遍历多个序列,有时候回合enumerate同时使用。给定一个已配对的序列时,zip函数还有一种机智的方式取拆分序列。这种方式的一种思路就是将行的列表转换为列的列表
- seq1=[('foo', 'onr'), ('bar', 'two'), ('baz', 'three')]
- first_name,last_name=zip(*seq1)
first_name
('foo', 'bar', 'baz')
last_name
('onr', 'two', 'three')
reversed函数将序列的元素倒序排列。reversed函数是一个生成器,因此如果没有实例化的时候(例如使用list函数或进行for循环),并不会产生一个倒序的列表。
dict拥有灵活尺寸的键值对集合,其中键和值都是Python对象,用{}时创建字典的一种方式,在字典中用逗号将键值对分隔开:
- dict={}
- d1={'a':'some value','b':[1,2,3,4]}
d1
{'a': 'some value', 'b': [1, 2, 3, 4]}
可以访问、插入或设置字典中的元素,就和访问列表和元组中的元素一样,eg:
d1['b']
[1,2,3,4]
也可以检查列表或元组中是否含有一个元素的相同语法来检查字典是否含有一个键:
'b' in d1
可以使用del关键字或者pop方法删除值,pop方法会在删除的同时返会被删除的值,并删除键。
keys方法和calues方法会分别提供字典键、值得迭代器。然而键值对并没有特定的顺序。这些函数输出的键、值都是按照相同得顺序。
list(d1.keys())
['a', 'b']
list(d1.values())
['some value', [1, 2, 3, 4]]
可以使用update方法将两个字典合并。updat方法改变了字典中元素位置,因此对于任何原字典中已经存在得键,如果传给updat方法得数据与含有相同得键,则它得值就会被覆盖。
集合是一种无序且元素唯一得容器。集合可以有两种创建方式:通过set函数或者时用字面值集与大括号得语法:
set([2,2,2,1,3,3])
{1, 2, 3}
{2,2,2,1,3,3}
{1, 2, 3}
集合支持数学上得集合操作,例如联合、交集、对称差集。两个集合得联合就是两个集合中不同元素得并集,可以用&操作符或intersection方法获得交集。
集合的操作合集:
a.add(x) 将元素x加入集合a
a.clear() 将集合重置为空,清空所有元素
a.remove(x) 从集合a移除某个元素
a.pop() 移除任意元素,如果集合是空得抛出keyError
a.union(b) a|b a和b中得所有不同元素
a.update(b) a|=b 将a中得内容设置为a和b得并集
a.intersection(b) a&b a、b中同时包含得元素
a.intersection_update(b) a&=b 将a得内容设置为a和b得交集
a.difference(b) a-b 在a不在b得元素
a.difference_update(b) a-=b 将a得内容设为在a不在b中得元素
a.symmetric_difference(b) a^b 所有在a或b中,但不是同时在a、b中得元素
a.symmetric_difference_update(b) a^=b 将a得内容设为所有在a或者b中,但不是同时在a、b中得元素
a.issubset(b) 如果a包含于b返回True
a.issuperset(b) 如果a包含b返回True
a.isdisjoint(b) a、b没有交集返回True
和字典类似,集合得元素必须是不可变的。
列表推导式,允许过滤一个容器得元素,用一种简明得表达式转换传递给过滤器得元素,从而生成一个新得列表。列表推导式得基本形式为
[expr for val in collection if condition]
等价于下面的for循环
result = []
for val in collection:
if condition:
result.append(expr)
过滤条件是可以忽略得,只留表达式。例如,给定过一个字符串列表,可以过滤出长度大于2的,并将字母改为大写。
strings=['a','as','bat','car','dove','python']
[x.upper() for x in strings if len(x)>2]
输出 ['BAT', 'CAR', 'DOVE', 'PYTHON']
集合和字典的推导式是列表推导式的自然拓展,用相似的方式生成集合和字典,字典推导式如下所示:
dict_comp={key-expr:value-expr for value in collection if condition}
集合推导式看起来很像列表推导式,只是中括号变为大括号:
set_comp={expr for value in collection if condition}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。