2016-11-07 2 views
0

У меня есть список, который выглядит как:Как связать каждый элемент в списке с другим в списке списков в Python?

results=[['000', '111', '000'], 
     ['110', '000', '101'], 
     ['000', '000', '000']] 

Мне нужно пару каждый элемент в подсписке с каждым другим элементом (кроме самого себя). Желаемый выход:

[[['000', '111'], ['000', '000'], ['111', '000']], 
[['110', '000'], ['110', '101'], ['000', '101']], 
[['000', '000'], ['000', '000'], ['000', '000']]] 

Код Покушение:

samplefinal =[] 
for sub_list in results: 
    for i, j in combinations(range(len(sub_list)), 2): 
     out = ['', ''] 
     sample3 = [] 
     for pair in zip(sub_list[i], sub_list[j]): 
      if '-' not in pair: 
       out[0] += pair[0] 
       out[1] += pair[1] 
      sample3.append(out) 
    samplefinal.append(sample3) 
print samplefinal 

Output: [[['111', '000'], ['111', '000'], ['111', '000']], [['000', '101'], ['000', '101'], ['000', '101']], [['000', '000'], ['000', '000'], ['000', '000']]] 

Я не совсем уверен, где я могу идти неправильно. Индексы и диапазон работают отлично, любые предложения?

ответ

2

Мне кажется, что вы хотите каждую комбинацию размера 2 ваших подсписок. Используйте itertools:

>>> import itertools 
>>> results=[['000', '111', '000'], ['110', '000', '101'], ['000', '000', '000']] 
>>> [[list(comb) for comb in itertools.combinations(sub,2)] for sub in results] 
[[['000', '111'], ['000', '000'], ['111', '000']], [['110', '000'], ['110', '101'], ['000', '101']], [['000', '000'], ['000', '000'], ['000', '000']]] 

и используя довольно-печать, чтобы сделать вещи ясно:

>>> from pprint import pprint 
>>> combos = [[list(comb) for comb in itertools.combinations(sub,2)] for sub in results] 
>>> pprint(combos) 
[[['000', '111'], ['000', '000'], ['111', '000']], 
[['110', '000'], ['110', '101'], ['000', '101']], 
[['000', '000'], ['000', '000'], ['000', '000']]] 
>>> 
+0

Мне нужно списки комбинаций не кортежи. Это делает сложнее для остальной части моего кода иметь кортежи – Biotechgeek

+0

@Biotechgeek Я думаю, вы имеете в виду список списков ... это простое исправление ... проверьте редактирование. –

0

Это список comprehensation способ сделать это:

[ [ [ [L[i],L[j]] for i in range(j) ] for j in range(1,len(L))] for L in results] 
Смежные вопросы