foo = [x for x in bar if x.occupants > 1]
在谷歌上搜索并搜索之后,无法弄清楚它的作用。也许我不是在搜索正确的内容,而是在这里。非常感谢你对取消此速记的任何输入。
当前的答案是好的,但不会谈论它们只是我们习惯的某种模式的语法糖。
让我们从一个例子开始,假设我们有10个数字,并且我们想要一个大于5的数字的子集。
>>> numbers = [12, 34, 1, 4, 4, 67, 37, 9, 0, 81]
对于上面的任务,下面的以下方法是完全相同的,并且从最冗长到简洁,易读和pythonic:
方法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(稍微干净一点的for-in循环)
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)
condition(x)
False,None
continue
有关更多信息,请按照教程中的所有其他答案进行链接:列表理解
奖金
(略显非Python语言,但出于完整性考虑,将其放在此处)
上面的示例可以写成:
result = filter(lambda x: x > 5, numbers)
上面的一般表达式可以写成:
result = map(function, filter(condition, numbers)) #result is a list in Py2