【问题标题】:Evaluating for loops in python, containing an array with an embedded for loop在python中评估for循环,包含一个嵌入for循环的数组
【发布时间】:2011-01-30 10:48:47
【问题描述】:

我在 python 中查看以下代码:

for ob in [ob for ob in context.scene.objects if ob.is_visible()]:
    pass

显然,这是一个 for each 循环,表示 foo 数组中的每个对象。但是,我在读取数组时遇到了一些麻烦。如果它只是:

[for ob in context.scene.objects if ob.is_visible()]

这是有道理的,允许使用具有相同名称的不同对象 ob 对我来说似乎很奇怪,但它看起来足够可读,表示数组由该循环中的每个元素组成。但是,在 for 循环之前使用 'ob' 没有什么意义,是否有一些我在文档中没有看到的语法?

谢谢

【问题讨论】:

    标签: python arrays list foreach


    【解决方案1】:

    它可能会帮助您了解将示例代码重写为等效代码的过程:

    temp_list = [ob for ob in context.scene.objects if ob.is_visible()]
    for ob in temp_list:
        pass
    

    【讨论】:

      【解决方案2】:

      这是一个列表理解。你可以这样理解:

      创建一个列表 [some_new_value for the_current_value in source_list_of_values if matches_criteria]

      想一想:

      [n*2 for n in [1,2,3,4]]
      

      这意味着,对于每个项目 n,在新列表中创建一个值为 n*2 的条目。所以,这将产生:

      [2,4,6,8]
      

      在您的情况下,由于 ob 的值没有被修改,它只是根据 ob.is_visible() 过滤列表。因此,您将获得所有可见的 ob 的新列表。

      【讨论】:

        【解决方案3】:

        第一个ob是一个表达式,举个简单的例子:

        >>>> [ x**2 for x in range(10) if x%2 == 0 ]
        [0, 4, 16, 36, 64]
        

        读取,从range(10) 创建一个列表,如果x 是偶数,则将其平方。丢弃x 的任何奇数。

        【讨论】:

          【解决方案4】:

          这是list comprehension 的语法。

          【讨论】:

          • 所以你说第一个词是它对每个对象执行的操作?并且因为除了 ob 之外什么都没有,所以它什么都不做?
          • 它是进入正在构造的列表中的对象的表达式。表达式只是ob,所以没有做任何更改。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-15
          • 2021-09-15
          • 2011-12-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多