Как создать последовательный подсписок списка с пропуском - PullRequest
1 голос
/ 04 марта 2020

Я хотел создать подсписок списка с пропусками. Чтобы уточнить приведенный список, например [1,3,6,2,4]

Я хочу получить все подсписки, как: [1,3], [1,3,6], [1,3,4], [1,3,6,2], [1,3,2,4], [1,3,6,4], [1,6], [1,6,2], [1,6,4]... и так далее. Пока что я только сейчас знаю, как создавать последовательные подсписки типа [1,3], [1,3,6],[1,3,6,2], [1,3,6,2,4], но мне трудно получить подсписок с пропуском типа [1,3,2,4] или [1,3,6,4]. Пожалуйста, помогите мне.

def sub_lists(list1):  
    sublist = [[]]   
    for i in range(len(list1) + 1):        
        for j in range(i + 1, len(list1) + 1):      
            sub = list1[i:j] 
            sublist.append(sub)   
    return sublist 

l1 = [1, 2, 3, 4] 
print(sub_lists(l1)) 

Ответы [ 3 ]

3 голосов
/ 04 марта 2020

Использование itertools.combinations

from itertools import combinations

x = [1,3,6,2,4]
y = []
for i in range(1, len(x)):
    y.extend(combinations(x, i+1))

print(y)

Вывод:

[(1, 3), (1, 6), (1, 2), (1, 4), (3, 6), (3, 2), (3, 4), (6, 2), (6, 4), 
 (2, 4), (1, 3, 6), (1, 3, 2), (1, 3, 4), (1, 6, 2), (1, 6, 4), (1, 2, 4), 
 (3, 6, 2), (3, 6, 4), (3, 2, 4), (6, 2, 4), (1, 3, 6, 2), (1, 3, 6, 4), 
 (1, 3, 2, 4), (1, 6, 2, 4), (3, 6, 2, 4), (1, 3, 6, 2, 4)]

Редактировать

Чтобы получить первый элемент быть первым использовать sorted

y = sorted(y, key=lambda x:x[0])
1 голос
/ 04 марта 2020

Надеюсь, это поможет

def skipList(lst):
    for i in lst:
        x = [i]
        for j in lst:
            if j == i:
                continue
            x.append(j)
            print(x)

a = [1,3,6,2,4]

skipList(a)
0 голосов
/ 04 марта 2020

Вы можете использовать рекурсию с генератором:

d = [1,3,6,2,4]
def combos(v, c = []):
   yield c
   yield from ([] if not v else combos(v[1:], c+[v[0]]))
   yield from ([] if not v else combos(v[1:], c))

print(list(filter(None, combos(d))))

Выход:

[[1], [1, 3], [1, 3, 6], [1, 3, 6, 2], [1, 3, 6, 2, 4], [1, 3, 6, 2], [1, 3, 6], [1, 3, 6, 4], [1, 3, 6], [1, 3], [1, 3, 2], [1, 3, 2, 4], [1, 3, 2], [1, 3], [1, 3, 4], [1, 3], [1], [1, 6], [1, 6, 2], [1, 6, 2, 4], [1, 6, 2], [1, 6], [1, 6, 4], [1, 6], [1], [1, 2], [1, 2, 4], [1, 2], [1], [1, 4], [1], [3], [3, 6], [3, 6, 2], [3, 6, 2, 4], [3, 6, 2], [3, 6], [3, 6, 4], [3, 6], [3], [3, 2], [3, 2, 4], [3, 2], [3], [3, 4], [3], [6], [6, 2], [6, 2, 4], [6, 2], [6], [6, 4], [6], [2], [2, 4], [2], [4]]
...