2016-06-06 7 views
0

Ich habe eine Datenstruktur wie dieseMultiply Unterpunkte von nur Listen

[[1,2,3,4,5], {9,2,5,8,7}, (7, 4, 8, 6)] 

Eine große Liste mit Listen, Mengen und Tupel.

Ich möchte alles in einer Liste mit 3 multiplizieren, aber nicht die Dinge in Tupel oder Set. Die Ausgabe sollte sein:

Die Elemente in der Liste wurden alle mit 3 multipliziert, der Rest bleibt unverändert.

Ich habe dies versucht:

l = [[2,6,9,13,15], {9,2,5,8,7}, (7, 4, 8, 6)] 
newList = [[subitem*3 for subitem in subList ] for subList in l] 
print(newList) 

Aber das gibt mir schlecht Ausgabe:

[[3, 6, 9, 12, 15], [24, 27, 6, 15, 21], [21, 12, 24, 18]] 

Die Liste ist gut, aber die Menge und Tupel müssen unverändert bleiben, sollten sie nicht sein konvertiert in Liste entweder. Ich möchte die Ausgabe genau wie ich zuvor gezeigt habe.

Danke!

+1

Fügen Sie dann eine Bedingung hinzu und prüfen Sie, ob die Unterliste eine Instanz von 'list' ist. –

Antwort

1

können Sie dieses Verständnis Muster verwenden: [x if a else b for x in lst]:

new_list = [[3*y for y in x] if isinstance(x, list) else x for x in l] 

Blick here für weitere Diskussion.

+0

Danke für die Antwort, ich wusste nicht, dass die Lösung so einfach war. Entschuldigung. Ich akzeptiere dieses, da es zuerst gepostet wurde. (kann noch nicht akzeptieren, muss 5 Minuten warten) – user89239213892389

1

Der Code, den Sie zur Verfügung gestellt haben, war so nah, dass Sie nur einen Haken hinzufügen müssen, ob die SubList eine Liste ist.

l = [[2,6,9,13,15], {9,2,5,8,7}, (7, 4, 8, 6)] 
newList = [[subitem*3 for subitem in subList ] if type(subList) is list else subList for subList in l] 
print(newList) 
1
newList = [[subitem*3 for subitem in subList ] if isinstance(subList, list) else subList for subList in l] 

Dies kann eine Option sein!