2017-11-02 2 views
1

Ich frage mich nur, ob es eine bessere Möglichkeit zum Ändern der spezifischen Element in der Liste der Liste mit List Verständnis? Im folgenden Beispiel quadriere ich das zweite Element jeder Liste in der Liste, aber ich möchte das Verständnis der inneren Liste nicht eliminieren.So ändern Sie bestimmte Elemente in der Liste mit Liste Verständnis in Python

l = [ 
[1,2,3,], 
[4,5,6,], 
[7,8,9,], 
] 

nl = [[num**2 if i==1 else num for i, num in enumerate(x)] for x in l] 
print nl 
+0

Versuchen Sie, "l" in Stelle zu ändern oder eine neue Liste 'nl' mit Listverständnis zu verursachen? – James

+4

Haben Sie versucht 'für x in l: x [1] = x [1] ** 2' – Wen

Antwort

2

Nicht sicher, wie das innere Verständnis zu halten, aber Sie so etwas tun könnte:

def square_idx_one(sl): 
    sl[1] **= 2 
    return sl 

l = [ 
[1,2,3,], 
[4,5,6,], 
[7,8,9,], 
] 

nl = [square_idx_one(sl) for sl in l] 
print (nl) 

Ergebnis:

[[1, 4, 3], [4, 25, 6], [7, 64, 9]] 

Aber wenn Sie das Original sind modifizierende denke ich ein for Schleife wahrscheinlich kanten diese Lösung für die Leistung, ganz zu schweigen von Speicher

2

In Ihrem Fall einfach

print [[x, y**2, z] for x, y, z in l] 

würde die Arbeit tun und sagt genauer, was vor sich geht. Im Allgemeinen, tun Sie

from itertools import izip 
p = (1, 2, 1) # element 0 power 1 
#    # element 1 power 2 
#    # element 2 power 1 
# ... 
print [[x**power for x, power in izip(row, p)] for row in l] 
+0

Für dieses spezielle Beispiel, ja, aber es skaliert nicht gut. – SiHa

Verwandte Themen