11-09-15 python 列表推导List Comprehension&

python 高级编程 这里面说的也太简略了吧,只有个例子,别的啥都没,

这种方式是从正常的for循环改写过来的,但是效率要高一些,

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

example 2:
[i+m for i in range(10) m for m in range(6)]

貌似见到的例子都可以分三个部分,先是生成的借过列表中的元素;再是一个原始列表,两次都是range(10);第三部分是个filter(??)或者循环嵌套(??),第三部分是可以没有的,

example 3:

[i*2 for i in [ i for i in range(10) ] ]



推导的嵌套,两个Comprehension都没有第三部分,

当要从一个旧列表中生成一个新列表时,这是个好方法;

类似的,当需要列表中每个元素都调用某个函数并返回结果时,可以使用map()函数。

当每次只需要列表中的一个元素时,应使用生成器,避免一次将整个列表调入内存。


一个比较实际的用途是,就是字典遍历中删除,

如果按照正常的思路:

d = {...}
for i in d:
    if d[i] == 0:
        del(d[i])
但是实际运行时,会报 RunTimeError,因为在遍历中改变了遍历对象,类似于在C++中使用迭代器的时候,不能删除一样,否则就找不着北了,

网上的说法是使用 d.keys()

d = {...}
for k in d.keys():
    if d[k] == 0:
        del(d[i])

但是在 3.2 版本中,这个也会报同样的错,
目前找到的解决办法就是 列表推导

d = {...}
d = [(k,v) for k,v in d.items() if v != 0]



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值