2016-11-07 2 views
0

Wie transformiere ich das folgende Listenverständnis in eine For-Loop-Anweisung in Python?Wie transformiere ich dieses Listenverständnis in eine For-Schleife?

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

zum Beispiel: S = [0,1], sollte es Ausgabe [[], [0], [1], [0,1]].

Ich dachte, es vielleicht wie die folgenden, aber ich war falsch:

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

Jeder Fortschritt auf * "Ich war falsch" *? Ein- und Ausgänge zum Beispiel? Ein offensichtliches Problem ist, dass das Original geschachtelte Listen erstellt, was Ihre neue Version nicht tut. – jonrsharpe

+0

oh, danke für deinen Rat und deine Hilfe !!! –

Antwort

2

Sie haben eine verschachtelte Liste Verständnis; Das äußere Listenverständnis erzeugt eine Reihe von Listen, die jeweils durch ein anderes Listenverständnis erzeugt werden.

Dies führt zu einer verschachtelten Schleife, wo die innere Schleife auch eine Liste erzeugt, dann ist das Anfügen an 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) 

Demo:

>>> 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]] 

Der Ausgang entspricht dem Ausgang des ursprünglichen Liste Verständnis:

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

Vielen Dank. Die verschachtelte Liste war mir vorher nicht bekannt. –

Verwandte Themen