2017-12-07 9 views
0

私のリストです:リストの可能な組み合わせをPythonでどのように印刷できますか?

groupA=['Russia', 'Egypt', 'Saudi Arabia', 'Uruguay'] 

だから私は、お互いに再生されますチームのすべてのユニークな組み合わせを印刷したい:

Russia Vs. Egypt 
Russia Vs. Saudi Arabia 
Russia Vs. Uruguay 
Egypt Vs. Saudi Arabia 
Egypt Vs. Uruguay 
Saudi Arabia Vs. Uruguay 

私はforループでこれを行うことができますか?

+0

double forループで実行できます。 –

+0

['itertools combination'](https://docs.python.org/3.5/library/itertools.html#itertools.combinations) – MrT

+0

私は退屈していたので、このコードを喜んでいましたが、将来あなたはまず自分自身を試してみてください。 – thumbtackthief

答えて

2

これは、あなたが欲しいものを行う必要があります。

groupA=['Russia', 'Egypt', 'Saudi Arabia', 'Uruguay'] 

for i in range(len(groupA)): 
    for j in range(i+1, len(groupA)): 
    print("{} Vs. {}".format(groupA[i], groupA[j])) 

あなたはitertoolsを使用して好む場合:あなたが考えているときはいつでも

groupA = ['Russia', 'Egypt', 'Saudi Arabia', 'Uruguay'] 
for index, country in enumerate(groupA): 
    for rival in groupA[index+1:]: 
     print('%s vs %s'%(country, rival)) 
+0

長さを抽出する必要はありません。リストの長さを複数回使用する場合は、変数を格納する変数を強く考慮する必要があります。 –

+0

@ShailynOrtizはい、この問題を解決するには複数の方法があります。 – thumbtackthief

+0

これに完全に同意します。それでも、複数回使用される値を保存しないようにするには、練習が悪いです。 –

2

これはトリックを行うことができます順列、組み合わせ、デカルト積など、itertoolsライブラリを考える;これはPythonの標準です。そしてそれがない場合は、sympyを見てください。

>>> from itertools import combinations 
>>> for c in combinations(groupA, 2): 
...  '{} Vs. {}'.format(*c) 
... 
'Russia Vs. Egypt' 
'Russia Vs. Saudi Arabia' 
'Russia Vs. Uruguay' 
'Egypt Vs. Saudi Arabia' 
'Egypt Vs. Uruguay' 
'Saudi Arabia Vs. Uruguay' 

formatは、出力にも適しています。

2

from itertools import combinations 

groupA=['Russia', 'Egypt', 'Saudi Arabia', 'Uruguay'] 

for combo in combinations(groupA, 2): 
    print("{} Vs. {}".format(combo[0], combo[1])) 
+0

私は自分の答えの複製であることについてdownvoteしようとしていましたが、私はどのように私の方法よりもきれいなコンボを解凍するのが好きです。 – thumbtackthief

+0

お詫び!私はあなたの答えの2番目の部分を見逃しました。 –

+0

あなたの改善がありました。私からのdownvoteなし! – thumbtackthief

関連する問題