3

私は1つのリストを持っています。

a = ['dog','cat','mouse']

すべてのリスト要素を組み合わせたリストを作成したいのですが、

ans = ['cat-dog', 'cat-mouse','dog-mouse']

これは私が思いついたものです、

a = ['dog','cat','mouse']
ans = []
for l in (a):
    t= [sorted([l,x]) for x in a if x != l]
    ans.extend([x[0]+'-'+x[1] for x in t])
print list(set(sorted(ans)))

よりシンプルでよりpythonicな方法はありますか!

4

3 に答える 3

7

注文はどのくらい重要ですか?

>>> a = ['dog','cat','mouse']
>>> from itertools import combinations
>>> ['-'.join(el) for el in combinations(a, 2)]
['dog-cat', 'dog-mouse', 'cat-mouse']

または、あなたの例に合わせて:

>>> ['-'.join(el) for el in combinations(sorted(a), 2)]
['cat-dog', 'cat-mouse', 'dog-mouse']
于 2013-02-21T01:13:18.000 に答える
4

itertoolsモジュール:

>>> import itertools
>>> map('-'.join, itertools.combinations(a, 2))
['dog-cat', 'dog-mouse', 'cat-mouse']
于 2013-02-21T01:12:09.437 に答える
1

itertools確かにここに行く方法です。ビルトインでのみ実行する場合は、次を使用します。

a = ['dog','cat','mouse']
ans = [x + '-' + y for x in a for y in a if x < y]
于 2013-02-21T02:17:43.807 に答える