目前的答案是好的,但不要谈论它们是怎样的
syntactic sugar
我们已经习惯了。
让我们从一个例子开始,假设我们有10个数字,我们想要一个大于5的数字的子集。
>>> numbers = [12, 34, 1, 4, 4, 67, 37, 9, 0, 81]
对于上述任务,下面的方法完全相同,从最冗长的到简洁的、可读的和
蟒蛇的
:
方法1
result = []
for index in range(len(numbers)):
if numbers[index] > 5:
result.append(numbers[index])
print result #Prints [12, 34, 67, 37, 9, 81]
方法2(稍微干净一点,用于环路内)
result = []
for number in numbers:
if number > 5:
result.append(number)
print result #Prints [12, 34, 67, 37, 9, 81]
方法3(输入列表理解)
result = [number for number in numbers if number > 5]
一般来说:
[function(number) for number in numbers if condition(number)]
在哪里?
-
function(x)
接受
x
并将其转化为有用的东西(例如:
x*x
)
-
如果
condition(x)
返回任何假Y值(假、无、空字符串、空列表等),然后将跳过当前迭代(认为
continue
)如果函数返回一个非假Y值,则当前值将使其成为最终的结果数组(并通过上面的转换步骤)。
要以稍微不同的方式理解语法,请查看下面的奖励部分。
有关更多信息,请遵循教程中所有其他答案都已链接:
List Comprehension
奖金
(稍微没有蟒蛇的味道,但为了完整起见放在这里)
上面的例子可以写成:
result = filter(lambda x: x > 5, numbers)
上面的一般表达式可以写成:
result = map(function, filter(condition, numbers)) #result is a list in Py2