列表
- 列表支持切片操作
- 详细的列表方法说明可参阅这里:深入列表
- 列表还可以作为栈和队列使用。但作为队列使用时在开头插入和弹出元素效率慢,可使用
collections.deque
map()、filter()、reduce()
map()
、filter()
、reduce()
函数的作用与JavaScript中类似。filter(function, sequence)
返回的序列由function(item)
结果为真的元素组成。结果始终是列表,除非序列是字符串或元组。map(function, sequence)
为每个元素调用function(item
函数并返回结果的列表。map
可以传入多个序列,传入的函数也必须有和序列数目相同的参数。执行时会以此用各序列上对应的元素来调用函数。
>>> seq = range(8)
>>> def add(x, y): return x+y
...
>>> map(add, seq, seq)
[0, 2, 4, 6, 8, 10, 12, 14]
reduce(function, sequence)
只返回一个值。
- 它首先以序列的前两个元素调用函数,然后再以返回结果和下一个元素继续调用。
- 如果序列只有一个元素,将直接返回,如果序列为空,则引发异常
- 函数可以传入第三个参数作为初始值,此时如果序列为空则返回初始值。否则就以初始值和序列第一个元素调用函数,以此类推。
列表推导式
列表推导式由括号括起来,括号里面包含一个表达式,表达式后面跟着一个for
语句,后面还可以接零个或更多的for
或if
语句。结果是一个新的列表,由表达式依据其后面的for
和if
子句上下文计算而来的结果构成。例如
squares = []
for x in range(10):
squares.append(x**2)
#相当于
squares = [x**2 for x in range(10)]
combs = []
for x in [1,2,3]:
for y in [3,1,4]:
if x != y:
combs.append((x, y))
# 相当于
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
- 列推导式可以嵌套列推导式
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
[[row[i] for row in matrix] for i in range(4)]
# output [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
元组
- 元组由逗号分割的若干值组成。
t = 12345, 54321, 'hello!'
u = t, (1, 2, 3, 4, 5)
empty = ()
singleton = 'hello',
- 元组是不可变的
集合
- 集合中的元素没有顺序且不会重复,类似于Java中的
Set
。 - 集合的基本用途有成员测试和消除重复的条目。
- 集合对象还支持并集、交集、差和对称差等数学运算。
- 集合使用花括号或
set([iterable])
创建。 - 集合也支持推导式。
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a # unique letters in a
set(['a', 'r', 'b', 'c', 'd'])
>>> a - b # letters in a but not in b
set(['r', 'd', 'b'])
>>> a | b # letters in either a or b
set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])
>>> a & b # letters in both a and b
set(['a', 'c'])
>>> a ^ b # letters in a or b but not both
set(['r', 'd', 'b', 'm', 'z', 'l'])
字典
- 字典类似于Java中的
Map
。 - 字典中的
key
可以是任意不可变类型。如果元祖只包含字符串、数字或元祖也可以用作key
。 - 字典也可使用推导式。
>>> 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}
>>> tel.keys()
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
遍历
遍历索引和对应的值
for i, v in enumerate(['tic', 'tac', 'toe']):
print i, v
同时遍历多个序列
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
print 'What is your {0}? It is {1}.'.format(q, a)
反向遍历序列
for i in reversed(xrange(1,10,2)):
print i
排序顺序循环序列
sorted
返回一个新的排序的列表。
basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
for f in sorted(set(basket)):
print f
遍历字典的键和值
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.iteritems():
print k, v