0

コードをもっとPythonicにしたいと思います。

次のようなリストの簡単なリストを持つ

numbers = [[1, 2], [3, 4, 5]]

私はこれをしたい:

mylist = []
for sublist in numbers:
  for number in sublist:
      mylist.append(number)

しかし、包括的なリスト定義を使用して、1行で:

mylist = [ number for number in  sublist for sublist in numbers] 

しかし、私が得た結果は[3、3、4、4、5、5]です。

私は何が間違っているのですか?前もって感謝します!

4

2 に答える 2

11

forループの順序が間違っています–

mylist = [number for sublist in numbers for number in sublist]

代わりは。人々はしばしばこれを驚くべきことに気づきます。forネストされたループの場合と同じ順序を使用するだけです。

あなたが使用できる代替案は

from itertools import chain

mylist = list(chain.from_iterable(numbers))
于 2012-08-09T21:55:55.147 に答える
2

個人的には、ネストされたリスト内包表記は読みにくく、理解しにくいと感じています。標準ライブラリにはitertools便利なchain関数があります:

chain(*iterables) --> chain object

.next() メソッドが最初の iterable からすべての iterable が使い果たされるまで要素を返し、次に次の iterable から要素を返すチェーン オブジェクトを返します。

したがって、次のようにします。

import itertools
mylist = list(itertools.chain(*numbers))
于 2012-08-09T22:00:21.647 に答える