List的有用的操作

原文出处: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)]
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值