转换嵌套的for循环以列出comp并从结果字典列表中过滤出完美平方

时间:2018-08-19 15:25:22

标签: python python-3.x list-comprehension nested-loops

我写了以下代码:

assets

结果是:

main

但是,我必须使用列表理解来获得相同的结果。我该怎么办?

4 个答案:

答案 0 :(得分:3)

以下嵌套的理解将起作用:

[{y: x*y for y in range(5) if y and x*x != x*y} for x in range(5)]
# [{}, {2: 2, 3: 3, 4: 4}, {1: 2, 3: 6, 4: 8}, {1: 3, 2: 6, 4: 12}, {1: 4, 2: 8, 3: 12}]

内部dict理解的条件被简化了,因为x*x != x*y已经暗示了x != 0

答案 1 :(得分:1)

您可以这样写:

a_list = [{y: x * y for y in range(5) if (x and y) and (x * x != x * y)}
          for x in range(5)]    

# [{}, {2: 2, 3: 3, 4: 4}, {1: 2, 3: 6, 4: 8}, {1: 3, 2: 6, 4: 12}, {1: 4, 2: 8, 3: 12}]

有时候,list comprehension比嵌套的for loops可读性差或更复杂。

答案 2 :(得分:1)

您的if语句可以简化一些:

[{y: x*y for y in range(1, 5) if 0 != x != y} for x in range(5)]

哪个给:

[{}, {2: 2, 3: 3, 4: 4}, {1: 2, 3: 6, 4: 8}, {1: 3, 2: 6, 4: 12}, {1: 4, 2: 8, 3: 12}]

请注意,内部范围不需要零索引。

答案 3 :(得分:0)

这里已经有一些非常好的答案。这是我的尝试:

a_list = [dict() for x in range(5)]
[[a_list[x].update({y:x * y}) for y in range(5) if (x != 0 and y != 0) and (x * x != x * y)] for x in range(5)]