云端轻侯的专栏

私人博客 http://www.smallcpp.com/

Python 高级特性之列表生成式

已经一个列表 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 我们想得到 [1 * 1, 2 * 2, 3 * 3, …, 10 * 10], 此时, 借助列表生成式可以很方便的实现:

[x * x for x in range(1, 11)]

[x * x for x in range(1, 11)] 就是一个列表生成式, 它的基础语法是:
[exp for iter_var in iterable]
首先迭代 iterable 里所有内容, 每一次迭代, 都把 iterable 里相应内容放到 iter_var 中, 再在表达式 exp 中应用该 iter_var 的内容, 最后用表达式的计算值生成一个新的列表.

除了基础语法外, 列表生成式还可以使用两层循环:

L = [(x, y) for x in range(2) for y in range(3)]
>>[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]

还可以加上判断语句:

N = [x for x in range(10) if x > 5]
>>[6, 7, 8, 9]

运用列表生成式, 可以写出非常简洁的代码;
例如, 把一个 list 中所有的字符串变成小写:

L = ['Hello', 'World', 'IBM', 'Apple']
[s.lower() for s in L]
>>> ['hello', 'world', 'ibm', 'apple']

注意事项
1. 当需要只是执行一个循环的时候尽量使用循环而不是列表解析, 这样更符合python提倡的直观性:

for item in sequence: 
    process(item)

2. 当有内建的操作或者类型能够以更直接的方式实现的, 不要使用列表解析.
例如复制一个列表时, 使用; L1=list(L) 即可, 不必使用: L1=[x for x in L]

3. 如果需要对每个元素都调用并且返回结果时, 应使用 L1=map(f,L), 而不是 L1=[f(x) for x in L].

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010850265/article/details/50561639
文章标签: python 列表生成式
个人分类: ★Python 灰帽★
想对作者说点什么? 我来说一句

列表生成式

一点总结

loongqian loongqian

2016-12-01 20:20:16

阅读数:192

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭