我写了以下代码:
assets
结果是:
main
但是,我必须使用列表理解来获得相同的结果。我该怎么办?
答案 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)]