385 Stimmen

Liste von Listen transponieren

Nehmen wir an:

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

Das Ergebnis, das ich suche, ist

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

und nicht

r = [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

9voto

jasonleonhard Punkte 8428

Sie haben die Wahl zwischen drei Optionen:

1. Karte mit Postleitzahl

solution1 = map(list, zip(*l))

2. Liste Verstehen

solution2 = [list(i) for i in zip(*l)]

3. For-Schleife Anhängen

solution3 = []
for i in zip(*l):
    solution3.append((list(i)))

Und um die Ergebnisse zu sehen:

print(*solution1)
print(*solution2)
print(*solution3)

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

2voto

reza.cse08 Punkte 5514
import numpy as np
r = list(map(list, np.transpose(l)))

1voto

footballman2399 Punkte 17

Vielleicht nicht die eleganteste Lösung, aber hier ist eine Lösung mit verschachtelten while-Schleifen:

def transpose(lst):
    newlist = []
    i = 0
    while i < len(lst):
        j = 0
        colvec = []
        while j < len(lst):
            colvec.append(lst[j][i])
            j = j + 1
        newlist.append(colvec)
        i = i + 1
    return newlist

1voto

god Punkte 1658

more_itertools.unzip() ist leicht zu lesen und funktioniert auch mit Generatoren.

import more_itertools
l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
r = more_itertools.unzip(l) # a tuple of generators.
r = list(map(list, r))      # a list of lists

oder gleichwertig

import more_itertools
l = more_itertools.chunked(range(1,10), 3)
r = more_itertools.unzip(l) # a tuple of generators.
r = list(map(list, r))      # a list of lists

1voto

Dishant Mewada Punkte 69
matrix = [[1,2,3],
          [1,2,3],
          [1,2,3],
          [1,2,3],
          [1,2,3],
          [1,2,3],
          [1,2,3]]

rows = len(matrix)
cols = len(matrix[0])

transposed = []
while len(transposed) < cols:
    transposed.append([])
    while len(transposed[-1]) < rows:
        transposed[-1].append(0)

for i in range(rows):
    for j in range(cols):
        transposed[j][i] = matrix[i][j]

for i in transposed:
    print(i)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X