def transposed(lists):
if not lists: return []
return map(lambda *row: list(row), *lists)
質問する
238 次
2 に答える
4
仮定しましょう
list1 = [0, 1, 2]
list2 = [3, 4, 5]
list3 = [6, 7, 8]
lists = [list1, list2, list3]
その後、電話
map(lambda *row: list(row), *lists)
と同等です
map(lambda *row: list(row), list1, list2, list3)
のドキュメントmap()
から、次のように、指定されたラムダ関数がリストの要素に適用されることがわかります。
f = lambda *row: list(row)
return [f(list1[0], list2[0], list3[0]),
f(list1[1], list2[1], list3[1]),
f(list1[2], list2[2], list3[2])]
ラムダ関数は、引数リストをPythonlist
オブジェクトに変換するだけなので、最終的には次のようになります。
return [[list1[0], list2[0], list3[0]],
[list1[1], list2[1], list3[1]],
[list1[2], list2[2], list3[2]]]
これは元のlists
転置です。
于 2011-02-16T17:44:35.197 に答える
1
map
関数f
といくつかの反復可能オブジェクトを使用して呼び出すと、a, b, c, ...
戻り値が返されます[f(a[0], b[0], c[0]), f(a[1], b[1, c[1], ...])
(したがって、基本的にリストを圧縮し、関数呼び出しごとに結果のタプルを解凍します)。この場合、f
は可変数の引数(*row
、すべての(順次)引数を含むタプルになります)を取り、それらをリストに結合します。[[a[0], a[1], ...], [b[0], ...], ...]
つまり、それは私たちが望むものに変わり[[a[0], b[0], ...], [a[1], ...], ...]
ます。
Use[list(row) for row in itertools.izip_longest(*lists)]
も使用できます。
于 2011-02-16T17:46:48.157 に答える