Комбинация с несколькими значениями в списке — создание подсписков

#python #python-3.x #list #algorithm #sublist

#python #python-3.x #Список #алгоритм #подсписк

Вопрос:

У меня следующая проблема:

 nums = [2, 4, 2, 10, 5] 
  

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

 sublist = [[2], [2,4], [2,4,2], [2,4,2,10], [2,4,2,10,5], [4], [4,2], [4,2,10], [4,2,10,5] ... ]
  

Мой код:

 def combinator(nums, N):

    for i in range(2**N):
        combo = []
        for j in range(N):
            if (i >> j) % 2 == 1:
                combo.append(nums[j])

        yield combo
  

и

 out = []
N = len(nums)
for i in combinator(nums, N):
    out.append(i)
  

Код генерирует нежелательный список со всеми комбинациями.
Как я могу улучшить код?

Комментарии:

1. Что такое » нежелательный список «? Кроме того, почему [2, 4, 2] не включено?

2. Еще один вопрос: следуя вашей логике, может быть два списка [2] . Вы хотите сохранить их оба? И что это N такое?

3. Вы ищете функцию, которая принимает список и возвращает список всех подсписков, в которых есть элементы, которые были смежными в исходном списке, в том же порядке?

4. Опечатки, спасибо. Я переформатировал код.

Ответ №1:

Функция, которая принимает список и возвращает список всех подсписков, содержащих элементы, которые были смежными в исходном списке, в том же порядке:

 def sublists(xs):
    return [xs[n:m 1] for n in range(len(xs)) for m in range(n, len(xs))]


print(sublists([2, 4, 2, 10, 5]))
  

Результат:

 [[2], [2, 4], [2, 4, 2], [2, 4, 2, 10], [2, 4, 2, 10, 5], [4], [4, 2], [4, 2, 10], [4, 2, 10, 5], [2], [2, 10], [2, 10, 5], [10], [10, 5], [5]]
  

Комментарии:

1. Удивительное решение Pythonic… Спасибо!