2016-10-14 2 views
0

Если у меня есть список в python, я хочу разделить список на под-списки некоторого размера ', а затем произвести все комбинации суб_листов размером 2.Разделение списка на Python и печать комбинаций

Например:

Input: List = ['1','2','3','4'] 
sub-list size s = 3 

Мой выход должен быть:

Sub-List-1 = ['1','2','3'] 
Combinations-1 = [('1','2'),('1','3'),('2','3')] 

Sub-List-2 = ['2','3','4'] 
Combinations-2 = [('2','3'),('2','4'),('3','4')] 

Я попытался это, но он не работает:

combination_list = []  
while (myList):  
    sub_list = []  
    sub_list.append(myList[:s])  
    myList = myList[s:] 
    combination_list.append(combinations(sub_list, 2)) 

Моей Логика:

  • Создание пустого списка для комбинации
  • Хотя мой первоначальный список не пуст
    • Создать пустой список для Sub списков
    • Добавляют ые элементы в подкатегории
    • Удалить элементы из моего первоначального списка (элементы, представленные в моем подписок)
    • Производят комбинации элементов в моих подразделах списках

Но я не получаю ожидаемый выход. Может ли кто-нибудь помочь мне с этим, пожалуйста?

ответ

0
result_list = [] 
combination_list = [] 
for i in range(len(myList)-s+1): 
    result_list.clear() 
    for j in range(i,i+s): 
     result_list.append(myList[j]) 
    for i in combinations(result_list, 2): 
     combination_list.append((i[0],i[1])) 

я получил то, что, как ожидается, с выше кусок кода! ! Но если вы думаете, что его можно улучшить или что-то не так с кодом, пожалуйста, дайте мне знать!

+0

Я получил то, что ожидается с вышеуказанным фрагментом кода! Но если вы думаете, что его можно улучшить или что-то не так с кодом, пожалуйста, дайте мне знать! –

1

вы можете попробовать это, я надеюсь, что это помогает

import itertools 

mylist = ['1','2','3','4'] 
ls =[] 
for i in range(0,int(len(mylist)/2)): 
     ls.append([mylist[i],mylist[i+1],mylist[i+2]]) 

print(len(ls)) /just getting the length to know how many sublist you have 
sub1 = ls[0] 
sub2 = ls[1] 

comb1 =[] 
comb2 =[] 

//using itertools 
comb1 = list(itertools.combinations(sub1,2)) 
comb2 = list(itertools.combinations(sub2,2)) 
print("combinations") 
print(comb1) 
print(comb2) 

// если вы хотите использовать какой-либо импорт, то вы можете использовать для петли, чтобы сделать логику

ncomb = [] 
for i in range(len(sub1)-1): 
    for a in range(i,len(sub1)-1): 
     ncomb.append((sub1[i],sub1[a+1])) 
print(ncomb) // output the same [('1', '2'), ('1', '3'), ('2', '3')] 

// или лучше с пониманием перечня

lsize = len(sub1) 
listcomp = [(sub1[x],sub1[y+1]) for x in range(lsize-1) for y in range(x,lsize-1)] 
print(listcomp) // output the same [('1', '2'), ('1', '3'), ('2', '3')] 

комбинации

[('1', '2'), ('1', '3'), ('2', '3')]

[('2', '3'), ('2', '4'), ('3', '4')]

+0

Привет, Спасибо за ответ !! Я сделал это по-другому !! Я получил то, что ожидается! Я даже попробовал то, что вы просили меня !! Это сработало! Спасибо еще раз! –

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