Итак, если я правильно понял, что вы хотите сделать, это создать список всех элементов списка и его подсписков по порядку? Честно говоря, звучит ужасно, но с помощью рекурсии вполне выполнимо:
def elementlist(input, output = []):
for element in input:
if not isinstance(element,(tuple,list)):
output.append(element)
else:
elementlist(element,output)
return output
list1 = [1,(2,[2,3,(2,3)])]
output = elementlist(list1)
print(output)
Основная идея этого решения состоит в том, чтобы просмотреть список, добавив его элементы в выходной список, если только это не список или кортеж, и в этом случае он будет отправлен на более глубокий уровень рекурсии для извлечения его отдельных элементов.
Не совсем. На самом деле мне нужно использовать рекурсию, чтобы решить эту проблему, но я ищу функцию, которая расширяет все элементы в списке. Если элементы находятся в кортеже, мне также нужно его расширить. Например, [2,[1,2]] это только [2,1,2], но если у меня есть список вроде [4,3,[2,1,(2,(8,9)]], ответ должен быть [4,3,2,1,8,9,8,9], потому что числа, которые уже находятся в простых значениях, остаются прежними, но числа в кортеже расширяются. Другой пример: [2,(3,(4) ,0)))] должно быть [2,4,0,4,0,4,0].
Затем вы должны добавить проверку того, является ли обрабатываемый элемент экземпляром кортежа, который должен быть расширен, и расширить его, если это так. Это начинает все больше и больше походить на домашнее задание, поэтому я позволю вам разобраться с этой частью самостоятельно.
Вы можете использовать try
и except
вместо использования условных выражений и проверки типов -
def recur(t):
try:
for x in t:
yield from recur(x)
except:
yield t
print(list(recur([1,(2,[2,3])])))
[1,2,2,3]
Это, наверное, то, что вам нужно - stackoverflow.com/questions/952914/…