【编程】Python 列表推导

列表推导是非常独特的Python语言特色之一,由此,可以在一行代码之内完成强大的函数式功能设计。 可以基于已经存在的列表以非常优雅的方式创建新的列表。本质上,是Python实现了数学家们在集合运算中使用的众所周知的符号。

列表推导,包括一对方括号,前面是表达式,带一个 for 从句,遍历每一个元素。表达式可以是任何东西,也就是可以在列表里面放任何对象。

语法

[表达式 for element in list if 条件]

等价于 for 循环:

for item in list:
if 条件:
表达式

例子

使用列表推导创建列表。

>>> lst = [x for x in range(5)]
>>> print (lst)
[0, 1, 2, 3, 4]

Python 列表推导的实例

使用列表推导创建平方数列表。

>>>lst = []
>>>lst = [x**2 for x in range(10)]
>>>print(lst)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

上面代码等价于:

lst = [] 
for x in range(10):
lst.append(x**2)
print(lst)

使用列表推导遍历一个字符串

在列表推导中使用条件

列表推导中的 if 语句

列表推导是语言支持函数式程序设计概念的一个例子。可以使用条件语句编辑已经存在的列表。

>>>lst = [ x for x in range(100) if x % 10 == 0]
>>>print(lst)
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

上面的代码等价于:

lst = [] 
for x in range(100):
if x % 10 == 0:
lst.append(x)
print(lst)

列表推导中的 if..else 语句

对于一个包含数字 1 到 10的列表,如果元素小于或等于5,就增加10,如果大于5,就增加100。

>>>lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>lst= [x+10 if x <= 5 else x+100 for x in lst]
>>>print(lst)
[11, 12, 13, 14, 15, 106, 107, 108, 109, 110]

带有嵌套条件 if 语句的列表推导

下面的 Python 脚步生成 11 到 19 的全部整数。

>>>lst = [i for i in range(30) if i > 10 if i < 20]
>>>print(lst)
[11, 12, 13, 14, 15, 16, 17, 18, 19]

上面的代码等价于:

lst = [] for i in range(100):
if i > 10:
if i < 20:
lst.append(i)
print(lst)

嵌套形式的列表推导

考虑 3X4矩阵的例子,三行的列表分别作为姓名,分数和级别。

lstMx = [['John', 'Gates', 'Don', 'Bill'], #姓名
[82, 55, 71, 42], #分数
['A', 'C', 'B', 'D'], #级别
]

可以使用下面的列表推导变换行列:

>>>lst = [[row[i] for row in lstMx] for i in range(4)]
>>>print(lst)

输出

[[‘John’, 82, ‘A’], [‘Gates’, 55, ‘C’], [‘Don’, 71, ‘B’], [‘Bill’, 42, ‘D’]]

等价于:

lst = [] 
for i in range(4):
rLst = []
for row in lstMx:
rLst.append(row[i])
lst.append(rLst)
print(lst)

使用列表推导获得每个单词的首字母

Python 用函数的列表推导

列表推导是语言支持函数式程序设计概念的一个例子。 可以在列表推导中使用函数。

>>> def findSquare (x):
… return x*x

>>> lst = [findSquare(i) for i in range(5)]
>>> print(lst)
[0, 1, 4, 9, 16]
>>>

使用列表推导按行读取文件

打开”testfile.txt”文件,并按行读取内容。

filename = "testfile.txt" with open(filename) as f:
lst = [x.strip() for x in f]
print(lst)

使用列表推导变大写

>>> lst = [x.upper() for x in [“apple”,”banana”,”cat”]]
>>> print(lst)
[‘APPLE’, ‘BANANA’, ‘CAT’]
>>>

使用列表推导变小写

>>> lst = [x.lower() for x in [‘APPLE’, ‘BANANA’, ‘CAT’]]
>>> print(lst)
[‘apple’, ‘banana’, ‘cat’]
>>>

列表推导,映射,Lambda 函数

列表推导可以完全替换带 lambda 函数map(), filter() 和 reduce()的使用。 除非想使用一个参数的函数,使用列表推导比使用内置的映射函数更清晰。

lst = [] 
for x in range(5):
lst.append(x**2)
print(lst)

输出

[0, 1, 4, 9, 16]

使用带 lambda 的 map() 函数

使用列表推导



【编程】Python 列表排序
【编程】Python 集合
【编程】Python字典
【编程】Python 元组
【编程】Python 列表 List
【编程】Python with 语句
【游戏】益智数独挑战脑力
【编程】Python 函数
【编程】Python循环控制

此条目发表在人工智能, 服务器, 程序开发分类目录,贴了, , , , , 标签。将固定链接加入收藏夹。