私はx=[(12,), (1,), (3,)]
(タプルのリスト)を持っていて、x=[12, 1, 3]
(整数のリスト)を可能な限り最良にしたいですか?あなたは助けてもらえますか?Pythonのリストからintのリストに
答えて
y = [i[0] for i in x]
これはタプルごとに1つの要素に対してのみ機能します。あなたは組ごとに複数の要素を持っている場合
しかし、あなたは少し複雑なリストの内包表記を使用することができます。
y = [i[j] for i in x for j in range(len(i))]
参考:
x = [i[0] for i in x]
@pedro - はい、常に1つの要素を持ちます。 – NullException
2番目の場合:シーケンスのシーケンスを平坦化する必要がある場合は、['itertools'](http://docs.python.org/2/library/itertools.html#recipes)docsにレシピがあります。フラット化する。それはおそらくそれとリストの理解の両方を理解する価値があります。 – abarnert
'for'の順序を逆にしてはいけませんか? – phant0m
はちょうどこの操作を行います:
>>> x=[(12,), (1,), (3,)]
>>> x
[(12,), (1,), (3,)]
>>> [i for i in x]
[(12,), (1,), (3,)]
>>> [i[0] for i in x]
[12, 1, 3]
これは、最も効率的な方法である:
x = [i for i, in x]
または、同等
x = [i for (i,) in x]
これは少し遅いです:
x = [i[0] for i in x]
あなたは効率の違いについて確かですか? 3.3.0の1M要素の 'list 'を使った簡単なテストでは、それぞれ4.15msと4.14msかかりました。リストを繰り返して新しいリストを作成するのに費やされた時間は4ms以上でした。はるかに速くなる可能性が高い。 xをgenexpに変更し、2つのlistcompsをgenquepに置き換えて 'deque(genexp、maxlen = 0)'にすると、私は1.36us対1.32usを得ます。 – abarnert
さらに重要なことは、誰がこの2つのどちらがより効率的であるかを気にするシナリオはどのようなシナリオですか? – abarnert
どこから来ても、この効率の傾向はどこにありますか?私にとっては、より多くのポイントを獲得するのは手腕のようです。 – phant0m
あなたは、マップ機能を使用することができます....
map(lambda y: y[0], x)
'map'を使うつもりならば、' lambda'の代わりに 'itemgetter'を使うかもしれません。 – abarnert
あなたは「最高の」とは何を意味するのかは言わなかったが、おそらくあなたは「最も無色の」または「最も読みやすい」かそのようなものを意味する。
F3AR3DLEGENDによって与えられたリストの理解はおそらく最も簡単です。リスト内包表記を読む方法を知っている人は、それが何を意味するのかを直ちに知るでしょう。
y = [i[0] for i in x]
しかし、多くの場合、リストを必要としないことがよくあります。リストを一度に繰り返すことができます。 x
に十億個の要素がある場合は、十億個の要素を構築して一度に1つの要素を反復することは悪い考えかもしれません。だから、あなたはジェネレータ式を使用することができます。
y = (i[0] for i in x)
あなたは関数型プログラミングを好む場合は、map
を使用することを好むかもしれません。
y = map(operator.itemgetter(0), x)
、これは発電機と同等です:map
の欠点は、あなたがそれをあなたがlambda
機能、またはitemgetter
を使用する必要があるのいずれかを意味機能だけではなく、式を、合格しなければならないということです発現; list
が必要な場合はlist
に渡します。 Python 2では、list
を返します。イテレータを使用する場合は、map
の代わりにitertools.imap
を使用します。
より一般的な平坦化ソリューションが必要な場合は、自分で作成することもできますが、この種の汎用ソリューションの場合は常にitertools
を探してみる価値があります。実際にはflatten
というレシピがあります。ネスティング "。だから、コピーしてあなたのコード(またはpip install more-itertools
)にそれを貼り付け、あなただけ行うことができますこの:
y = flatten(x)
あなたはその後、chain
がどのようにして、そして、chain.from_iterable
が実装されている方法でflatten
が実装されているかを見れば実装されていれば、組み込み関数に関しても同じことを書くことができます。しかし、なぜflatten
がもっと読みやすく分かりやすくなるのでしょうか?最後に
、あなたは(もちろん、またはジェネレータ式)ネストされたリストの内包表記にジェネリック版を減らしたい場合:
y = [j for i in x for j in i]
ただし、ネストされたリストの内包表記は、両方の書面で、誤解するのは非常に簡単です読書。 (F3AR3DLEGENDは、最初に一番簡単な答えを出した人と同じ人で、ネストされた理解度を与えて間違ってしまったのですが、もしそれを取り除けなければ、試してみませんか?)本当に単純なケースでは、あまりにも悪くはないが、まだ、私はflatten
ははるかに読みやすくすると思います。
パターンマッチングを解くタプルについてあなたの意見は何ですか? –
@PavelAnossov:どうですか?タプルを個別の名前付き変数に展開する場合は、明らかに正しいことです。単一の値に変換したいタプルがあるときは、それほど明確ではないように見えますが、実際には好ましくありません。 – abarnert
- 1. リストに基づくリストのリストからのPythonの削除
- 2. pythonのリストから
- 3. pythonバイナリツリーからのpythonリスト
- 4. mysqlコマンドのリストからintアイテムを変換する[python、mysql]
- 5. リストのリストからDict Comprehension python
- 6. エルムジェネレータのInt - >リストのInt
- 7. オートマップマップのプロパティ値リスト<type>からリスト<int>
- 8. リストからスカラで(Int、Int)を返す[Int、Int]
- 9. intのリストをリストのリストに変換するには?
- 10. 2Dの文字列リストを2Dのintリストのpythonに変換するには?
- 11. Pythonで端末からintリストを読み込む方法
- 12. Python 2Dのリストからcsv
- 13. リストからのアクセスリスト - python
- 14. リストからPythonランダムピック
- 15. リストのリストから2次元リストを返すPython関数
- 16. リストを<int>からintに変更する
- 17. リストのリストPython
- 18. リストからintを取得する(pygame)
- 19. リスト<int>からIEnumerable <IComparable>
- 20. ハスケルintリストから文字列
- 21. Python:リストにリスト
- 22. リストするリストのPythonリスト
- 23. pythonのリストからリスト要素を削除するには?
- 24. Python - スライスからリスト内に複数のリストを作成する
- 25. Pythonでリストのリストから空白を削除するには?
- 26. Pythonのリストから新しいリストを作成するには?
- 27. Pythonでリストのリストから要素を比較するには
- 28. Pythonで既存のリストからリストを作成するには
- 29. スカラーのOther ThingのリストからIntのリストを作成します
- 30. リストのリストから
問題を解答に含めるには、編集してください。ありがとうございました。 – bernie
は常に同じ形式のタプルですか? '(n、)'? –
Py3kの代わりの 'zip(* x)[0]'または 'next(zip(* x))' – JBernardo