列表推导式提供了一种创建列表的简洁方法。
它由包含表达式的括号组成,后跟一个 for 子句,然后是
零个或多个 for 或 if 子句。表达式可以是任何东西,这意味着您可以
将各种对象放入列表中。
结果将是一个新列表,该列表是通过在其
后面的 for 和 if 子句的上下文中评估表达式而产生的。
列表推导式总是返回一个结果列表。
如果你曾经这样做过:
new_list = []
for i in old_list:
if filter(i):
new_list.append(expressions(i))
您可以使用列表理解获得相同的结果。注意 append 方法已经消失了!
new_list = [expression(i) for i in old_list if filter(i)]
句法
列表推导式以方括号' [' 和 ']'开头,以帮助您记住
结果将是一个列表。
该基本语法使用方括号。
[ expression for item in list if conditional ]
这相当于:
for item in list:
if conditional:
expression
让我们分解一下,看看它有什么作用。
new_list = [expression(i) for i in old_list if filter(i)]
new_list
新列表(结果)。
expression(i)
表达式基于用于旧列表中每个元素的变量。
for i in old_list
单词 for 后跟要使用的变量名,后跟
旧列表中的单词。
if filter(i)
应用带有 If 语句的过滤器。
此博客展示了如何直观地分解列表理解的示例:
new_range = [i * i for i in range(5) if i % 2 == 0]
对应于:
*结果* = [*变换* *迭代* *过滤器* ]
* 运算符用于重复。过滤器部分回答了是否
应该转换项目的问题。
例子
现在当我们知道列表推导式的语法后,让我们展示一些示例以及
如何使用它。
创建一个简单的列表
让我们从创建一个简单的列表开始。
x = [i for i in range(10)]
print (x)
# This will give the output:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
这样您就可以创建一个简单的列表。
使用循环和列表推导式创建列表
对于下一个示例,假设我们要创建一个平方列表。从一个空列表开始。
# You can either use loops:
squares = []
for x in range(10):
squares.append(x**2)
print (squares)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# Or you can use list comprehensions to get the same result:
squares = [x**2 for x in range(10)]
print (squares)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
只需记住语法:[如果有条件,则列表中的项目的表达式]
将列表的部分相乘
将列表的每个部分乘以 3 并将其分配给一个新列表。
list1 = [3,4,5]
multiplied = [item*3 for item in list1]
print (multiplied)
[9,12,15]
请注意 item*3 如何将每件乘以 3。
显示每个单词的第一个字母
我们将取每个单词的第一个字母并从中列出一个列表。
listOfWords = ["this","is","a","list","of","words"]
items = [ word[0] for word in listOfWords ]
print (items)
输出应该是:['t', 'i', 'a', 'l', 'o', 'w']
小写/大写转换器
让我们展示转换小写/大写字母是多么容易。
>>> [x.lower() for x in ["A","B","C"]]
['a', 'b', 'c']
>>> [x.upper() for x in ["a","b","c"]]
['A', 'B', 'C']
仅从给定字符串打印数字
此示例显示如何从字符串中提取所有数字。
string = "Hello 12345 World"
numbers = [x for x in string if x.isdigit()]
print (numbers)
>> ['1', '2', '3', '4', '5']
如果您不想要任何数字,请将 x.isdigit() 更改为 x.isalpha()。
使用列表理解解析文件
在这个例子中,我们可以看到如何从文本文件中取出特定的行。
创建一个文本文件并在其中放入一些文本。
this is line1
this is line2
this is line3
this is line4
this is line5
将文件另存为 test.txt
# Then create the filter by using list comprehension:
fh = open("test.txt", "r")
result = [i for i in fh if "line3" in i]
print (result)
输出:['this is line3\n']