#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… Спасибо!