2016-07-28 21 views
-2

Ich habe 2 Listen in Python:Python: verketten 2 Liste

list1 [1,1,0,0,1,1,0,0,1,1] 

list2 [a,b,c,d,e,f,-,-,-,-] 

Ich möchte die Folge zur Ausgabe:

Ausgang

[a,b,-,-,c,d,-,-,e,f] 

bin ich verloren, versuchte mehrere Dinge ohne etwas Glück. Hat jemand eine Idee, wie es geht? Hier ist mein Versuch:

for e in range (0, len(stringas)): 
    if controllo[e] == "1": 
    memoria.append(stringas[e]) 
    if controllo[e] == "0": 
    memoria.append("-") 
    blocco.append(e) 
    salva.append(stringas[e]) 

print (stringas) 
print (memoria) 

for f in salva: 
    print (blocco[c]) 
    print (salva[c]) 
    memoria.insert(blocco[c], salva[c]) 
    c = c + 1 

Vielen Dank im Voraus.

+0

Können Sie beschreiben, was Ihr Code tun soll bitte ? – khelwood

+1

Bitte erklären Sie ein wenig mehr den Algorithmus, um das Ergebnis aus den beiden Listen zu erhalten – Humbalan

+0

Ich versuche, es ein wenig besser zu beschreiben: – ohdecas

Antwort

0
out = [] 
for i in list1: 
    out.append(list2.pop(0) if i else '-') 
+0

Sie können '-' mit list2.pop (-1) ersetzen, wenn Sie immer die '-' Zeichen haben t am Ende der Liste2 –

3

Versuchen Sie folgendes:

output = [list2.pop(b-1) for b in list1] 
0

Oder auch diesen Einzeiler:

list1 = [1,1,0,0,1,1,0,0,1,1] 

list2 = ['a','b','c','d','e','f','-','-','-','-'] 

output = [list2[i] if v else '-' for i, v in enumerate(list1)] 

print(output) 

UPDATE nicht ganz ein Einzeiler und könnte effizienter in der for-Schleife sein - aber ich bevor Diese Lesbarkeit

list1 = [1,1,0,0,1,1,0,0,1,1] 
list2 = ['a','b','c','d','e','f'] 

output = [] 

j = 0 

for i, v in enumerate(list1): 
    output.append('-' if not v else list2[j]) 
    j = j if not v else j+1 

print(output) 
+0

Dies funktioniert nicht, wenn der i-Wert erhöht wird.In deinem Beispiel wirst du 'c', 'd' ganz verpassen, was nicht von OP beabsichtigt ist :-) – thiruvenkadam

+0

Oh verdammt - natürlich wird es - ich gebe dem Mangel an Morgenkoffein heute die Schuld! –

+0

Das ist besser-ish! –

0

Basierend auf Ihrem Code, denke ich, das ist was du willst.

Fügen Sie für jedes Element in list1, wenn das Element eine 1 ist, das nächste Element in list2 zu newList hinzu. Wenn es eine 0 ist, fügen Sie einen Bindestrich zu newList hinzu.

list1 = [ 0, 0, 1, 1, 1, 0 ] 
list2 = [ 'a', 'b', 'c', 'd', 'e', 'f' ] # idk why you needed hyphens in this list 
newList = [ ] 

i = 0 
j = 0 
for i in range (len(list1)): 
    if list1(i) == 1: 
     newList += [ list2(j) ] 
     j++ 
    if list1(i) == 0: 
     newList += [ '-' ] 
return newList 

# output: [ '-', '-', 'a', 'b', 'c', '-' ] 

Es sei denn, Ihr Ziel ist es, dass, wenn das Element in list1 ein 1 ist, von Anfang an von list1 bis newList das nächste Element hinzufügen, und wenn es ein 0 ist, fügen Sie das nächste Element vom Ende. Dies garantiert nicht, dass die Nullen entsprechende Bindestriche erzeugen.

list1 = [ 0, 0, 1, 1, 1, 0 ] 
list2 = [ 'a', 'b', 'c', '-', '-', '-' ] 
newList = [ ] 

i = 0 
start = 0 
end = len(list2) - 1 

for i in range (len(list1)): 
    if list1(i) == 1: 
     newList += [ list2(start) ] 
     start += 1 
    if list1(i) == 0 
     newList += [ list2(end) ] 
     end -= 1 
return newList 

# output: [ '-', '-', 'a', 'b', 'c', '-' ] 
+0

Perfekt, Sie kamen in meinem Kopf und verlassen mit der richtigen Lösung;) Vielen Dank und wie viel Erfahrung haben Sie? – ohdecas

+0

Welchen wolltest du? Haha, sehr wenig Erfahrung ... – Yaelle

0

Die Logik für dieses Programm wie folgt sein sollte: 1. Wenn das aktuelle Element in list1 1 ist, knallen das erste Element aus list2 2. Pop das letzte Element aus list2

Wenn nicht,

Hier ist ein Beispielcode für Ihre Referenz:

list1 = [1,1,0,0,1,1,0,0,1,1] 
list2 = ["a","b","c","d","e","f","-","-","-","-"] 
outList = [] 

for index in range(len(list1)): 
    # If the current value of list1 element is 1, pop from the first 
    if list1[index] == 1: 
     outList.append(list2.pop(0)) 
    # If the current value of list1 element is 0, pop from the last 
    else: 
     outList.append(list2.pop(-1)) 

for item in outList: 
    print(item) 
0

I 2 Szenarien vorstellen kann, wie die Ausgabe kommt beschrieben:

1) Wenn t er erste Liste 0, nur hinzufügen ‚-‘

list1 = [1,1,0,0,1,1,0,0,1,1] 
list2 = ['a', 'b', 'c', 'd', 'e', 'f', '-', '-', '-'] 
index =0 
output = [] 
for element in list1: 
    if element != 0: 
     element = list2[index] 
     index += 1 
    else: 
     element = '-' 
    output.append(element) 

2) Wenn die ‚0‘ in die Liste 2 für Element vom Ende

list1 = [1,1,0,0,1,1,0,0,1,1] 
list2 = ['a', 'b', 'c', 'd', 'e', 'f', '-', '-', '-'] 
list3 = list2[:] 
output = [] 
for element in list1: 
    if element != 0: 
     element = list3.pop(0) 
    else: 
     element = list3.pop(-1) 
    output.append(element)