Python for-in循环前面有一个变量

发布于 2021-02-02 23:18:19

foo = [x for x in bar if x.occupants > 1]

在谷歌上搜索并搜索之后,无法弄清楚它的作用。也许我不是在搜索正确的内容,而是在这里。非常感谢你对取消此速记的任何输入。

关注者
0
被浏览
85
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    当前的答案是好的,但不会谈论它们只是我们习惯的某种模式的语法糖。

    让我们从一个例子开始,假设我们有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)需要一个x,并将其转换成有用的东西(例如像:x*x)
    • condition(x)返回任何False-y值(False,None,空字符串,空列表等),则当前迭代将被跳过(认为continue)。如果函数返回非False-y值,则当前值将其返回到最终的结果数组(并通过上面的转换步骤)。
      要以稍微不同的方式理解语法,请查看下面的“奖金”部分。

    有关更多信息,请按照教程中的所有其他答案进行链接:列表理解

    奖金

    (略显非Python语言,但出于完整性考虑,将其放在此处)

    上面的示例可以写成:

    result = filter(lambda x: x > 5, numbers)
    

    上面的一般表达式可以写成:

    result = map(function, filter(condition, numbers)) #result is a list in Py2
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看