2016-07-19 41 views
0

Der Frage-Header, den ich habe, ist ein wenig verwirrend und ich war einfach nicht sicher, wie es auch nur mit dem Header gut erklären.Vergleichen Sie zwei Python-Listen und erweitern Sie die kürzere Liste auf die Länge der längeren Liste

Ich habe zwei Listen.

list_1 = [10,20,30,40,50,60,70,80,90] 
list_2 = [10,40,70] 

Erwartete Ausgabe:

new_list = [10,0,0,40,0,0,70,0,0] 

Wie soll ich das tun? Im Folgenden ist das, was ich habe, und ich war nicht sicher, was falsch war:

def expand_list(complete_list, to_be_expand_list): 
    expanded_list = [] 
    for i in complete_list: 
     for j in to_be_expand_list: 
      if i == j: 
       expanded_list.append(j) 
      else: 
       if expanded_list[-1] != 0: 
        expanded_list.append(0) 

    return expanded_list 
+0

Was passiert, wenn Sie Ihren Code ausführen? Ist das ein Fehler? Wenn ja, wo ist die Rückverfolgung? Führt es aus, aber nicht, was Sie erwarten? – Kwarrtz

+0

Wenn Reihenfolge nicht wichtig ist: '[i [1] für i in Liste (itertools.zip_longest (list_1, list_2, fillvalue = 0))]' – squiguy

Antwort

6

etwas Versuchen wie folgt aus:

def expand_list(full_list, short_list): 
    return [x if x in short_list else 0 for x in full_list] 

Diese verwendet ein Listenverstehen, um eine Liste zu erzeugen, die die Länge der vollständigen Liste hat, aber nur enthält diese Elemente, die in der kurzen Liste waren, ersetzen den ganzen Rest durch Nullen.

+0

Kurz und gut, danke! –

2
list_1 = [10,20,30,40,50,60,70,80,90] 
list_2 = [10,40,70] 

new_list = list_1[:] 

for i, v in enumerate(list_1): 
    if v not in list_2: 
     new_list[i] = 0 

print new_list 

Ergebnis:

[10, 0, 0, 40, 0, 0, 70, 0, 0] 

Dieser überprüft die Positionen in list_1 die nicht in list_2 und Sets sie zu 0

2

Sie gehen über alle to_be_expand_list für jeden Artikel auf der complete_list und in (fast) jeder Iteration, die Sie einen Artikel anhängen, so dass Sie am Ende haben len(list1)*len(list2) Artikel.

Sie sollten es ändern:

def expand_list(complete_list, to_be_expand_list): 
    expanded_list = [] 
    for i in complete_list: 
     if i in be_expand_list: 
      expanded_list.append(i) 
     else: 
      expanded_list.append(0) 
    return expanded_list 

Wenn Sie einfacheren Ansatz suchen Sie list comprehension verwenden können:

[x if x in list2 else 0 for x in list1] 
+2

Danke für die Erklärung, was falsch war! –

+0

@WilsonMak Sie sind herzlich willkommen –

Verwandte Themen