如何将此列表理解转换为for循环?

时间:2016-11-07 21:17:42

标签: python for-loop list-comprehension

如何将以下列表推导转换为Python中的for循环语句?

p = [[S[x] for x in range(len(S)) if i>>x&1] for i in range(2**len(S))]

例如:S = [0,1],它应输出[[], [0], [1], [0,1]]

我认为它可能如下,但我错了:

p=[]
for x in range(len(S)):
    for i in range(2**len(S)):
        if i>>x&1:
            p.append([S[x]])

1 个答案:

答案 0 :(得分:2)

你有一个嵌套列表理解;外部列表理解产生一系列列表,每个列表由另一个列表理解产生。

这转换为嵌套循环,其中内部循环也生成一个列表,然后附加到p

p = []
for i in range(2 ** len(S)):
    inner = []
    for x in range(len(S)):
        if i >> x & 1:
            inner.append(S[x])
    p.append(inner)

演示:

>>> S = [0, 1]
>>> p = []
>>> for i in range(2 ** len(S)):
...     inner = []
...     for x in range(len(S)):
...         if i >> x & 1:
...             inner.append(S[x])
...     p.append(inner)
...
>>> p
[[], [0], [1], [0, 1]]

输出与原始列表理解的输出匹配:

>>> [[S[x] for x in range(len(S)) if i>>x&1] for i in range(2**len(S))]
[[], [0], [1], [0, 1]]