原文出处:http://www.siafoo.net/article/52
声明:本文是根据原文进行相关总结,并不是原文的真实翻译
文中提到了针对List的一些比较优化的操作,包括map、filter、reduce、enumerate、any、all、zip
1.如果需要对一个list中的元素全部执行一个操作,则可以使用map
方法一:新建一个List,遍历源List,并执行操作
numbers = [1,2,3,4,5]
squares = []
for number in numbers:
squares.append(number*number)
方法二:map加lambda函数
numbers = [1,2,3,4,5]
squares = map(lambda x: x*x, numbers)
方法三:map操作
numbers = [1,2,3,4,5]
squares = [number*number for number in numbers]
2.对List执行过滤 (如取出List中小于4的元素)
方法一:遍历
numbers = [1,2,3,4,5]
numbers_under_4 = []
for number in numbers:
if number < 4:
numbers_under_4.append(number)
方法二:filter加lambda
numbers = [1,2,3,4,5]
numbers_under_4 = filter(lambda x: x < 4, squares)
方法三:推荐的方式
numbers = [1,2,3,4,5]
numbers_under_4 = [number for number in numbers if number < 4]
3.List当中的reduce操作 (例:计算所有元素的积)
方法一:遍历
numbers = [1,2,3,4,5]
result = 1
for number in numbers:
result *= number
方法二:使用reduce函数
numbers = [1,2,3,4,5]
result = reduce(lambda a,b: a*b, numbers)
4.List的遍历并同时打印元素的索引 (enumerate)
strings = ['a', 'b', 'c', 'd', 'e']
for index, string in enumerate(strings):
print index, string,
#prints '0,a 1,b 2,c 3,d 4,e'
5.List当中判断是否存在某一条件的元素(any)或者是否所有元素都满足一个条件(all)
如判断一个List中是否存在小于10的元素
方法一:使用遍历的操作,并计算新生成的List是否为空,该种方法必须对元素进行全部遍历,性能低下
numbers = [1,10,100,1000,10000]
if [number for number in numbers if number < 10]:
print 'At least one element is low 10'
方法二:使用any,类似于短路操作,找到立即退出
numbers = [1,10,100,1000,10000]
if any(number < 10 for number in numbers):
print 'Success'
另外如判断List中是否全部大于10
方法一:遍历,然后比较长度,性能低下
numbers = [1,2,3,4,5,6,7,8,9]
if len(numbers) == len([number for number in numbers if number > 10]):
print 'Success!'
方法二:使用all,短路操作,
numbers = [1,2,3,4,5,6,7,8,9]
if all(number > 10 for number in numbers):
print 'Success!'
6.zip操作符 连接多个List,为一个同等长度的List,单List中的元素为tuple
letters = ['a', 'b', 'c']
numbers = [1, 2, 3]
squares = [1, 4, 9]
zipped_list = zip(letters, numbers, squares)
# zipped_list contains [('a', 1, 1), ('b', 2, 4), ('c', 3, 9)]