如何将以下列表推导转换为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]])
答案 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]]