Scorpion_MB
@Scorpion_MB
Изучаю Питон

Как организовать список в одну строку в Питоне?

Как правильно написать код вычисления списка в одну строку? Есть такой код:
a_list = [1, [2, 3]]
new_list = []

for el in a_list:
    if isinstance(el, list):
          for inner_el in el:
               new_list.append(inner_el)
    else:
          new_list.append(el)

Как правильно заменить его одной строкой? Следующие варианты не работают:
new_list = [inner_el if isinstance(el, list) else el for el in a_list for inner_el in el]

new_list = [el if not isinstance(el, list) else inner_el for el in a_list for inner_el in el]


Выдается ошибка: TypeError: 'int' object is not iterable
  • Вопрос задан
  • 150 просмотров
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
new_list = sum( (item if isinstance(item, list) else [item] for item in a_list) , [])

По сути, мы каждый элемент a_list превращаем в список, если он не был списком.
А потом суммируем все эти списки (это будет операция конкатенации).
Честно говоря, простой цикл for был бы читаемее (и быстрее, я думаю):
new_list = []
for item in a_list:
  if isinstance(item, list):
    new_list.extend(item)
  else:
    new_list.append(item)


Но будет работать только для одного уровня вложенности. Если нужно больше, используй рекурсию или что-то подобное.
Ответ написан
MinTnt
@MinTnt
print(sum(map(lambda x: x if isinstance(x, list) else [x], a_list), []))


a_list = [1, [2, [3]]]

def one_dimens_mass(lst):
  new_list = []
  for elem in lst:
    if type(elem)==list:
      new_list+= one_dimens_mass(elem)
    else:
      new_list.append(elem)
  return new_list
  
print(one_dimens_mass(a_list)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
aRegius
@aRegius
Python Enthusiast
def flatten(items):
	  for i in items:
		    if isinstance(i, Iterable):
			      yield from flatten(i)
		    else:
			      yield i
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы