python列表与元组

python列表与元组

列表与元组

python中最基础的两种集合,区别:列表是动态的,大小可以改变,元组是不可变的,一旦创建就不能修改
,因为不变性,所以元组是可哈希的。

列表的介绍

列表是对其他对象的引用组成的连续数组,因为是数组,所以数组有的优点列表都有,查找效率比链表高,插入与删除的操作效率比链表低。python的列表不是链表,需要真正的链表的时候,python在内置collections模块中提供了deque(双端队列),他是栈和队列的一般化(是双向链表)

列表推导

在使用常规的for循环往列表中添加数据时,因为python是解释型语言,解释器每次循环都需要判断序列中需要修改的部分,并且需要用一个计数器来跟踪需要处理的元素,并且在添加时使用append()方法是列表方法,,每次遍历还需要额外执行查找append函数的查询函数,列表推导正式解决这个问题的正确方法,它对上述一部分做了自动化处理,提高了效率
普通for循环添加数据

events=[]
for i in range(10):
    if i%2==0:
        events.append(i)

使用列表推导

events=[i for i in range(10) if i%2==0]

enumerate(枚举)

在循环使用序列时,都可以使用枚举这个内置函数获取其索引,不止列表可以,但凡是序列类型的都可以,包括字符串:

for i,e in enumerate('hello'):
... print(i,e)
...
0 h
1 e
2 l
3 l
4 o

如果需要合并多个列表中的元素,可以使用内置的zip()函数。对两个大小相等的可迭代对象进行均匀遍历时,

 for item in zip([1,2,3],[4,5,6]):
... print(item)
...
(1, 4)
(2, 5)
(3, 6)

调用两次zip时,可将其恢复原状

 for item in zip(*zip([1,2,3],[4,5,6])):
... print(item)
...
(1, 2, 3)
(4, 5, 6)

zip([1,2,3],[4,5,6])返回的是地址名,只有使用指针*zip([1,2,3],[4,5,6])才可以有返回值

序列解包

使用任意序列类型,只要赋值运算符左边的变量数目与序列中的元素数目相等,都可以将序列中的元素解包到左边的变量中去

a,b,*c='hello'
>>> a
'h'
>>> b
'e'
>>> c
['l', 'l', 'o']
使用*号
>>> a,*b,c=0,1,2,3
>>> a,
(0,)
>>> b
[1, 2]
>>> c
3
嵌套解包
>>> (a,b),(c,d)=(1,2),(3,4)
>>> a
1
>>> b
2
>>> c
3
>>> d
4
posted @ 2017-12-26 14:54  Doctor_Bool  阅读(219)  评论(0编辑  收藏  举报