2016-09-26 2 views
-1

У меня есть 2 идентичных списков а = [a1, a2, a3] б = [a1, a2, a3] Что является наиболее эффективным способом перебирать эти 2 списка одновременно в то время как я интересен только в сочетании разных элементов из обоих списков, несмотря на порядок, то есть a1a2 и a1a3. Комбинации a1a1, a2a2, a3a3, a2a1, a3a1 мне интересно пропустить, но интересно сохранить значения итераторов.питона цикла через 2 списков пропуска аналогичные элементы

Хотите повторно фразу вопросы: интересны возможные комбинации 2-х элементов из списка а = [a1, a2, a3]

+0

Используйте 'itertools.product', возможно, с' if left == right: continue', чтобы пропустить те, где они одинаковы. – jonrsharpe

+2

@jonrsharpe не может быть таким простым, как 'itertools.combination (a, 2)', поскольку оба списка идентичны, и комбинация автоматически удаляет дубликаты – armak

+1

@armak, вы можете сделать это так, но это не так * "итерации по этим двум спискам одновременно" *. Это зависит от того, что фактически пытается выполнить OP, что не совсем ясно - если два списка всегда * одинаковы, неясно, почему у них есть два, чтобы начать. – jonrsharpe

ответ

3

Use combinations,

from itertools import combinations 
for i in combinations(['a1','a2','a3'],2): 
    print i 
+1

с небольшой модификацией, работал. Спасибо @Rahul K P – Felix

0

списковых!

a = ['1', '2', '3'] 
b = ['1', '2', '3'] 

c = [i + j for i in a for j in b if j != i] 
print(c) # prints -> ['12', '13', '21', '23', '31', '32'] 

EDIT

, если вы считаете a1a2 и a2a1 дубликатами вы можете использовать некоторые умные нарезку, чтобы пропустить их так:

c = [ia + ib for i, ia in enumerate(a) for ib in a[i+1:]] 
print(c) # prints -> ['12', '13', '23'] 

Как вы могли заметить, список b не используется во втором.

+0

в этом случае меня не интересуют '21', '31', '32', поскольку он повторяет элементы в комбинациях – Felix

+0

@Felix О, извините, я пропустил это. код теперь обновляется. –

Смежные вопросы