@Timebird

Список в списке --> список?

Допустим, имеется такой список:
a = [1, 2, 3, [4, 5, 6], 7, 8]
Как его развернуть, чтобы получился такой список?
a = [1, 2, 3, 4, 5, 6, 7, 8]
  • Вопрос задан
  • 414 просмотров
Решения вопроса 2
aRegius
@aRegius
Python Enthusiast
>>> from collections import Iterable
>>> def flatten(items):
	      for x in items:
		        if isinstance(x, Iterable):
			            yield from flatten(x)
		        else:
			            yield x

>>> a = [1, 2, 3, [4, 5, 6], 7, 8]
>>> list(flatten(a))
[1, 2, 3, 4, 5, 6, 7, 8]
Ответ написан
Комментировать
adugin
@adugin Куратор тега Python
Я бы переписал вариант от aRegius для данного случая так:
def flatten(sequence):
    for item in sequence:
        try:
            yield from item  # Или yield from flatten(item) для более общего случая
        except TypeError:
            yield item

Первый подход предпочтителен, но можно ещё и так (код хуже читается):
from itertools import chain

def flatten(sequence):
    list_of_lists = ([item] if type(item) is int else item for item in sequence)
    return list(chain.from_iterable(list_of_lists))

flatten([1, 2, 3, [4, 5, 6], 7, 8])

И ещё вариант, ради фана:
[int(e) for e in re.findall('\d+', str(a))]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы