Разделение списка на Python и печать комбинаций

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

Например:

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))

Моя логика:

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

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

python-3.x,

0

Ответов: 2


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)

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

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')]

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

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 принят
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]))

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

питон-3.x,
Похожие вопросы