列表理解中初始变量的用途
Purpose of the initial variable in list comprehension
evens_to_50 = [i for i in range(51) if i % 2 == 0]
print evens_to_50
有人可以解释一下 i 紧接在右括号之后和此代码第一行中的 for 之前,或者分享 link 或解释此类代码的指南;我找到的只是一个一般性的解释(不是针对 python,而是针对一般的编程),但没有太具体;我理解(我认为)for i in range(51) if i % 2 == 0 但不是它之前的 i 部分。
当您编写列表推导式时,您必须为循环的每次迭代提供一个您希望返回的值(最终将填充结果列表的内容),然后您的循环就是 运行。最基本的形式是这样的:
[i for i in range(10)]
这就意味着 "use the value I'm iterating over as the return value each time and put that into my list." 你 不必 这么简单。例如,如果您要生成元组列表,它可能如下所示:
[(i, False) for i in range(10)]
您所指的 i
是将要插入到您正在创建的新列表中的值。列表推导式会为您创建一个新列表,而 i
就是新列表中的内容。要将您粘贴的列表理解分解为英语,您所说的(从左到右)是:
将值 i
放入新列表中,每个 i
的值都在 0 - 50 的数字范围内,但只有偶数,即 i % 2 = 0
或者重新写一遍:
对于0-50范围内的每个值(range(51)
),只插入那些偶数(i % 2 = 0
),插入每个数字(每个数字由i
表示) 到新列表 ([]
):
[i for i in range(51) if i % 2 == 0]
这是每次迭代时将包含在您的列表中的值。
例如,尝试将其更改为 i + 1
,所有结果列表值都应增加 1。
左括号后的第一个 i
表示将存储在列表中的值。出现的其他 i's
只是循环变量。从技术上讲,它们都是循环控制变量,但是,第一个 i
将存储在列表中。
列表理解只是 shorthand 一些等效的 for 循环。
[i for i in range(3)]
表示:
result = []
for i in range(3):
result.append(i)
列表理解只是一次性构建列表匿名,即没有为其分配名称(如上例中的result
)。
第一个 i
所做的事情的答案是它回答了问题 "What do I add to the list on each iteration defined by the following loop?"
试试这些推导式看看你得到了什么:
['c' for i in range(3)]
[2*i for i in range(3)]
['hello'[i] for i in range(3)]
evens_to_50 = [i for i in range(51) if i % 2 == 0]
print evens_to_50
有人可以解释一下 i 紧接在右括号之后和此代码第一行中的 for 之前,或者分享 link 或解释此类代码的指南;我找到的只是一个一般性的解释(不是针对 python,而是针对一般的编程),但没有太具体;我理解(我认为)for i in range(51) if i % 2 == 0 但不是它之前的 i 部分。
当您编写列表推导式时,您必须为循环的每次迭代提供一个您希望返回的值(最终将填充结果列表的内容),然后您的循环就是 运行。最基本的形式是这样的:
[i for i in range(10)]
这就意味着 "use the value I'm iterating over as the return value each time and put that into my list." 你 不必 这么简单。例如,如果您要生成元组列表,它可能如下所示:
[(i, False) for i in range(10)]
您所指的 i
是将要插入到您正在创建的新列表中的值。列表推导式会为您创建一个新列表,而 i
就是新列表中的内容。要将您粘贴的列表理解分解为英语,您所说的(从左到右)是:
将值 i
放入新列表中,每个 i
的值都在 0 - 50 的数字范围内,但只有偶数,即 i % 2 = 0
或者重新写一遍:
对于0-50范围内的每个值(range(51)
),只插入那些偶数(i % 2 = 0
),插入每个数字(每个数字由i
表示) 到新列表 ([]
):
[i for i in range(51) if i % 2 == 0]
这是每次迭代时将包含在您的列表中的值。
例如,尝试将其更改为 i + 1
,所有结果列表值都应增加 1。
左括号后的第一个 i
表示将存储在列表中的值。出现的其他 i's
只是循环变量。从技术上讲,它们都是循环控制变量,但是,第一个 i
将存储在列表中。
列表理解只是 shorthand 一些等效的 for 循环。
[i for i in range(3)]
表示:
result = []
for i in range(3):
result.append(i)
列表理解只是一次性构建列表匿名,即没有为其分配名称(如上例中的result
)。
第一个 i
所做的事情的答案是它回答了问题 "What do I add to the list on each iteration defined by the following loop?"
试试这些推导式看看你得到了什么:
['c' for i in range(3)]
[2*i for i in range(3)]
['hello'[i] for i in range(3)]