2016-07-23 6 views
1

のすべてのペアは、リスト内の3つの要素6つの組み合わせで取得 -ジップリストを通って、私は私が達成したい何</p> <pre><code>collections = [u'Room Designers', u'BCRF', u'House'] </code></pre> <p>次のように文字列のリストをzip圧縮したい項目

zipall = [zip(i,j) for i in collections for j in collections if i!=j] 

以下の私のコードで

("Room Designers", "BCRF"), ("Room Designers", "House"), ("BCRF", "House"), ("BCRF", "Room Designers"), ("House", "BCRF"), ("House", "Room") 

は、私が得た:

[[(u'R', u'B'), (u'o', u'C'), (u'o', u'R'), (u'm', u'F')], [(u'R', u'H'), (u'o', u'o'), (u'o', u'u'), (u'm', u's'), (u' ', u'e')], [(u'B', u'R'), (u'C', u'o'), (u'R', u'o'), (u'F', u'm')], [(u'B', u'H'), (u'C', u'o'), (u'R', u'u'), (u'F', u's')], [(u'H', u'R'), (u'o', u'o'), (u'u', u'o'), (u's', u'm'), (u'e', u' ')], [(u'H', u'B'), (u'o', u'C'), (u'u', u'R'), (u's', u'F')]] 

これを行うにはどうすればよいでしょうか?ありがとうございました!!

+1

あなたはzip' 'に2つの文字列を渡しているので、あなたは、単一の文字の組み合わせを取得している、との文字列は、文字の列そのものであり、そのジッパーは、各文字列から単一文字のペアを引っ張っています。 –

+0

ありがとうございます。確かに。私はまたitertoolsがとても強力であることを気付かなかった! – achimneyswallow

答えて

1

最後にzipコールを省略する必要がある場合は、文字列を個々の文字に分割し、をペアにするため、この呼び出しを省略する必要があります。

zipall = [(i,j) for i in collections for j in collections if i!=j] 

# [(u'Room Designers', u'BCRF'), (u'Room Designers', u'House'), (u'BCRF', u'Room Designers'), (u'BCRF', u'House'), (u'House', u'Room Designers'), (u'House', u'BCRF')] 

これらの問題については、itertoolsライブラリは非常に便利です。この特定の問題については、itertools.permutationsを使用して2つの要素のすべての順列を得ることができます。順列(組み合わせとは対照的に)では、ペアリングの順序が重要です。

import itertools 

# Create all permutations of 2 items 
output = list(itertools.permutations(collections, 2)) 

# [(u'Room Designers', u'BCRF'), (u'Room Designers', u'House'), (u'BCRF', u'Room Designers'), (u'BCRF', u'House'), (u'House', u'Room Designers'), (u'House', u'BCRF')] 
+0

ありがとうございます。これは私が必要とするものです。あなたの答えはまた、非常に徹底して役立ちます。今私は私が欲しいものを得るために二日間を知っている!ありがとう!! – achimneyswallow