列表推导(过滤)
以过滤偶数为例,一般方法:
numbers = [1,2,3,4,5,6]
even = []
for number in numbers:
if number%2 == 0:
even.append(number)
推导方式过滤:
numbers = [1,2,3,4,5,6]
even = [number for number in numbers if number%2 == 0]
倒序列表
>>> lst = [1, 2, 3, 4, 5]
>>> lst.reverse()
>>> lst
[5, 4, 3, 2, 1]
>>> a = [1,2,3]
>>> a[::-1]
[3, 2, 1]
>>> lst = [1, 2, 3, 4, 5]
>>> list(reversed(lst))
[5, 4, 3, 2, 1]
判断一个列表是否为空
if mylist:
# Do something with my list
else:
# The list is empty
排序
列表排序有两种方式,一种是列表自带的方式 sort,一种是内建函数 sorted 。 复杂的数据类型可通过指定 key 参数进行排序。 由字典构成的列表,根据字典元素中的 age 字段进行排序:
items = [{'name': 'Homer', 'age': 39},
{'name': 'Bart', 'age': 10},
{"name": 'cater', 'age': 20}]
items.sort(key=lambda item: item.get("age"))
print(items)
>>> [{'age': 10, 'name': 'Bart'}, {'age': 20, 'name': 'cater'}, {'age': 39, 'name': 'Homer'}]
sort 方法用于对原列表进行重新排序,指定 key 参数,key 是匿名函数, item 是列表中的字典元素,我们根据字典中的age进行排序,默认是按升序排列, 指定 reverse=True 按降序排列:
items.sort(key=lambda item: item.get("age"), reverse=True)
>>> [{'name': 'Homer', 'age': 39}, {'name': 'cater', 'age': 20}, {'name': 'Bart', 'age': 10}]
如果不希望改变原列表,而是生成一个新的有序列表对象,那么可以内置函数 sorted , 该函数返回新列表:
items = [{'name': 'Homer', 'age': 39},
{'name': 'Bart', 'age': 10},
{"name": 'cater', 'age': 20}]
new_items = sorted(items, key=lambda item: item.get("age"))
print(items)
>>> [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}, {'name': 'cater', 'age': 20}]
print(new_items)
>>> [{'name': 'Bart', 'age': 10}, {'name': 'cater', 'age': 20}, {'name': 'Homer', 'age': 39}]
同时迭代两个列表
nfc = ["Packers", "49ers"]
afc = ["Ravens", "Patriots"]
for teama, teamb in zip(nfc, afc):
print teama + " vs. " + teamb
>>> Packers vs. Ravens
>>> 49ers vs. Patriots
带索引的列表迭代
teams = ["Packers", "49ers", "Ravens", "Patriots"]
for index, team in enumerate(teams):
print index, team
>>> 0 Packers
>>> 1 49ers
>>> 2 Ravens
>>> 3 Patriots
enumerate 还可以指定元素的第一个元素从几开始,默认是0,也可以指定从1开始:
teams = ["Packers", "49ers", "Ravens", "Patriots"]
for index, team in enumerate(teams, start=1):
print index, team
>>> 1 Packers
>>> 2 49ers
>>> 3 Ravens
>>> 4 Patriots
初始化列表的值
items = [0]*3
print items
>>> [0,0,0]
列表转换为字符串
teams = ["Packers", "49ers", "Ravens", "Patriots"]
print ", ".join(teams)
>>> 'Packers, 49ers, Ravens, Patriots'
获取列表的子集
有时,你只需要列表中的部分元素,这里是一些获取列表子集的方法:
x = [1,2,3,4,5,6]
#前3个
print x[:3]
>>> [1,2,3]
#中间4个
print x[1:5]
>>> [2,3,4,5]
#最后3个
print x[3:]
>>> [4,5,6]
#奇数项
print x[::2]
>>> [1,3,5]
#偶数项
print x[1::2]
>>> [2,4,6]
获取两个列表的差
示例:
>>> lista = [1,3,5,7,9,1]
>>> listb = [1,2,5]
>>> list(set(lista)-set(listb))
[9, 3, 7]
拷贝一个列表
第一种方法:
new_list = old_list[:]
第二种方法:
new_list = list(old_list)
第三种方法:
import copy
# 浅拷贝
new_list = copy.copy(old_list)
# 深拷贝
new_list = copy.deepcopy(old_list)
移除列表中的元素
删除列表中的元素有三种方式
remove 移除某个元素,而且只能移除第一次出现的元素:
>>> a = [0, 2, 2, 3]
>>> a.remove(2)
>>> a
[0, 2, 3]
# 如果要移除的元素不在列表中,则抛出 ValueError 异常
>>> a.remove(7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list·
del 根据指定的位置移除某元素:
>>> a = [3, 2, 2, 1]
# 移除第一个元素
>>> del a[1]
[3, 2, 1]
# 当超出列表的下表索引时,抛出IndexError的异常
>>> del a[7]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
pop 与 del 类似,但是 pop 方法可以返回移除的元素:
>>> a = [4, 3, 5]
>>> a.pop(1)
3
>>> a
[4, 5]
# 同样,当超出列表的下表索引时,抛出IndexError的异常
>>> a.pop(7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
连接两个列表
listone = [1, 2, 3]
listtwo = [4, 5, 6]
mergedlist = listone + listtwo
print(mergelist)
>>>
[1, 2, 3, 4, 5, 6]
随机获取列表中的某个元素
import random
items = [8, 23, 45, 12, 78]
>>> random.choice(items)
78
>>> random.choice(items)
45
>>> random.choice(items)
12