4

これは、MWE私が行う必要がある再調整の 1 つです。

a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
b = [[], [], []]

for item in a:
    b[0].append(item[0])    
    b[1].append(item[1])
    b[2].append(item[2])

これにより、b次のようになります。

b = [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]

つまり、内のすべてのリストの最初の項目はすべてaの最初のリストに保存され、 のbリスト 2 と 3 についても同じことが保存されますb

これをやや大きなaリストに適用する必要があります。これを行うより効率的な方法はありますか?

4

1 に答える 1

14

行と列を転置するより良い方法があります

b = zip(*a)

デモ:

>>> a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
>>> zip(*a)
[(1, 4, 7, 10), (2, 5, 8, 11), (3, 6, 9, 12)]

zip()複数のシーケンスを引数として取り、それぞれの要素をペアにして新しいリストを形成します。splat 引数を渡すことでa、 Python にへの個別の引数に展開するように要求します。*azip()

出力にはタプルのリストが表示されることに注意してください。必要に応じて要素をリストにマップします。

b = map(list, zip(*a))
于 2013-07-18T14:34:19.237 に答える