2016-09-30 7 views
2

Gegeben ein Array von Arrays mit unterschiedlichen Längen. Gibt es einen Reiniger (kürzer), um die Längen der Arrays zu, indem die kürzeren mit Nullen außer dem folgenden Code ausfüllen:Gleichsetzen der Längen der Arrays in einem Array von Arrays

a = [[1.0, 2.0, 3.0, 4.0],[2.0, 3.0, 1.0],[5.0, 5.0, 5.0, 5.0],[1.0, 1.0]] 


max =0 
for x in a: 
    if len(x) > max: 
     max = len(x) 

print max 
new = [] 
for x in a: 
    if len(x)<max: 
     x.extend([0.0]* (max-len(x))) 
    new.append(x) 

print new 

Antwort

5

Sie die Länge der größten Liste innerhalb a finden mit entweder:

len(max(a, key=len))

oder

max(map(len, a))

und auch eine Liste Verständnis verwenden, um eine neue Liste zu erstellen:

>>> a = [[1.0, 2.0, 3.0, 4.0], [2.0, 3.0, 1.0], [5.0, 5.0, 5.0, 5.0], [1.0, 1.0]] 
>>> m = len(max(a, key=len)) 
>>> new = [x + [0]*(m - len(x)) for x in a] 
>>> new 
[[1.0, 2.0, 3.0, 4.0], [2.0, 3.0, 1.0, 0], [5.0, 5.0, 5.0, 5.0], [1.0, 1.0, 0, 0]] 
1
In: b = [i+[0.]*(max(map(len,a))-len(i)) for i in a] 

In: b 
Out: 
[[1.0, 2.0, 3.0, 4.0], 
[2.0, 3.0, 1.0, 0.0], 
[5.0, 5.0, 5.0, 5.0], 
[1.0, 1.0, 0.0, 0.0]] 
+3

Wiederholung 'max (Karte (len, a))' für jedes Array ziemlich ineffizient ist ... – deceze

+1

Du hast Recht, manchmal ist es besser, kein Einzeiler verwenden. Die Lösung von @eugene y ist daher natürlich effektiver. –