2017-01-11 22 views
1

文字列のリストを持ってみましょう:fruit = ["apple", "orange", "banana"]Pythonの文字列のリストの反復

for icnt, i in fruit: 
    jcnt = icnt 
    j = i 
    print ("icnt: %d, i: %s", icnt, i) 
    for jcnt, j in fruit: 
     print ("i: %s, j: %s", i, j) 

首を長くして文字列がicnt-thから起動しない:私は、すなわち

apple - apple, apple - orange, apple - banana, 
orange - orange, orange - banana, 
banana - banana 

私の考えはenumerate果物にして、次のか、すべての可能なペアを出力し、出力を持っていると思いますポジションから始まります。どのようにi番目の文字列から2番目のループを開始するには?あなたが任意の繰り返しをしたくない場合は

apple - apple 
apple - orange 
apple - banana 
orange - orange 
orange - banana 
banana - banana 

またはitertools.combinations

import itertools 

for a,b in itertools.combinations_with_replacement(["apple", "orange", "banana"],2): 
    print("{} - {}".format(a,b)) 

出力:これを行うには

+0

使用は 'あなたが' itertools.combinations'を使用する必要がありますが、あなたの質問に答えるために、 –

+0

をitertools.combinations'、あなたは第二のループに 'fruit'リストをスライスする必要がjcnt、jの列挙(果実[icnt:]): 'もしあなたが' enumerate'を使うつもりなら、そうしてください。 –

答えて

3

使用itertools.combinations_with_replacement

apple - orange 
apple - banana 
orange - banana 

ところで、あなたの固定コードが見えますこのようにenumerate

fruit = ["apple", "orange", "banana"] 

for icnt, i in enumerate(fruit): 
    for jcnt in range(icnt,len(fruit)): 
     print ("{} - {}".format(i, fruit[jcnt])) 
2

ホイールを改造しないでください。 itertoolsを使用してください:ジャン=FrançoisFabreが言う@のよう

from itertools import combinations_with_replacement 

fruit = ["apple", "orange", "banana"] 

print('\n'.join((' - '.join(perm) for perm in combinations_with_replacement(fruit, 2)))) 
# apple - apple 
# apple - orange 
# apple - banana 
# orange - orange 
# orange - banana 
# banana - banana 
+0

これは正確にはOPに表示されているものではありません。例えば、アップル - リンゴを持っていません。 –

+0

@MosesKoledoyeありがとう。固定されている – DeepSpace

関連する問題