すべての組み合わせのリストにリストを変換しますそれがどのように見えるように、それはカンマ区切りです:Pythonのエレガントな方法は、私のような要素のリストを持っている
[['A', '2', '3', 'Jan'], ['A', '2', '3', 'Feb']
['B', '2', '3', 'Jan'], ['B', '2', '3', 'Feb']]
この使用してPythonのビルトイン関数/ライブラリを達成するためのエレガントな方法は何ですか?
すべての組み合わせのリストにリストを変換しますそれがどのように見えるように、それはカンマ区切りです:Pythonのエレガントな方法は、私のような要素のリストを持っている
[['A', '2', '3', 'Jan'], ['A', '2', '3', 'Feb']
['B', '2', '3', 'Jan'], ['B', '2', '3', 'Feb']]
この使用してPythonのビルトイン関数/ライブラリを達成するためのエレガントな方法は何ですか?
あなたが最初にコンマ,
に基づいてリストの要素を分割し、次にように、所望のリストを取得するためにitertools.product
を使用することがあります。
new_list
の内容はなり
from itertools import product
x = ['A, B', '2', '3', 'Jan, Feb']
new_list = list(product(*[i.split(', ') for i in x]))
:
[('A', '2', '3', 'Jan'),
('A', '2', '3', 'Feb'),
('B', '2', '3', 'Jan'),
('B', '2', '3', 'Feb')]
Dan Dのコメントに基づいて、中間のList V/s中間生成器比較の比較を以下に示します(timeit
)。中間リストの式は少し速いです:
mquadri$ python -m timeit "from itertools import product; list(product(*(i.split(', ') for i in ['A, B', '2', '3', 'Jan, Feb'])))"
100000 loops, best of 3: 4.83 usec per loop
mquadri$ python -m timeit "from itertools import product; list(product(*[i.split(', ') for i in ['A, B', '2', '3', 'Jan, Feb']]))"
100000 loops, best of 3: 3.78 usec per loop
ジェネレータの式をsplat: 'list(product(* in i)x))')に渡すことで無駄なリストを作成することを避けることができます。 –
@DanD。この場合、中間リストは比較的高速になります。なぜなら、* product *で使用するためには、ジェネレータの式が役に立たないからです。完全に評価する必要があります。 –
両方の 'timeit'比較による修正済みの答え –
これまで試みたことがありますか? – wim
ボブ、あなたは何をしたいのかよく説明しました。しかし、[SO]は説明に基づくのではなく、むしろ質疑応答に基づいています。特定の質問がありますか? –
いくつかの文字列分割とitertools.permutations? – doctorlove