0

文字列の 2 つのプールがあり、両方でループを実行したいと考えています。たとえば、2 つのラベル付きのリンゴを 1 つのプレートに入れたい場合は、次のように記述します。

basket1 = ['apple#1', 'apple#2', 'apple#3', 'apple#4']
    for fruit1 in basket1:

       basket2 = ['apple#1', 'apple#2', 'apple#3', 'apple#4']
       for fruit2 in basket2:

            if fruit1 == fruit2:
                print 'Oops!'

            else:
                print "New Plate = %s and %s" % (fruit1, fruit2)

ただし、順序は重要ではありません。たとえば、apple#1-apple#2 は apple#2-apple#1 と同等であると考えています。これをコーディングする最も簡単な方法は何ですか?

2 番目のループでカウンターを作成して 2 番目のバスケットを追跡し、毎回 2 番目のループでポイントゼロから開始しないことを考えています。

4

3 に答える 3

3

不等式 ( !=) を ( ) 未満に変更<し、リスト (バスケット) がソートされていて同じである場合、(a,b) が得られると (b,a) は得られません。

そう

fruits = ['apple#1', 'apple#2', 'apple#3', 'apple#4']
[(f1, f2) for f1 in fruits for f2 in fruits if f1 != f2]

になる

fruits = ['apple#1', 'apple#2', 'apple#3', 'apple#4']
[(f1, f2) for f1 in fruits for f2 in fruits if f1 < f2]

ただし、2 つの異なるリストがある場合は、

fruits1 = ['apple#1', 'apple#2', 'apple#3', 'apple#4']
fruits2 = ['apple#1', 'apple#2', 'apple#3', 'apple#4', 'orange#1', 'orange#2']

わずかな変更を加えれば、上記の手法を引き続き使用できます。

[(f1, f2) for f1 in fruits1 for f2 in fruits2 if f1 < f2]
于 2013-11-01T15:35:33.290 に答える