понимание вложенного списка python

У меня есть этот список:

l = [['40', '20', '10', '30'], ['20', '20', '20', '20', '20', '30', '20'], ['30', '20', '30', '50', '10', '30', '20', '20', '20'], ['100', '100'], ['100', '100', '100', '100', '100'], ['100', '100', '100', '100']] 

Теперь я хочу преобразовать каждый элемент в список для float. Мое решение таково:

 newList = [] for x in l: for y in x: newList.append(float(y)) 

Но можно ли это сделать с использованием вложенного списка, не так ли?

что я сделал:

 [float(y) for y in x for x in l] 

Но тогда результатом будет куча 100-х с суммой 2400.

любое решение, объяснение было бы очень оценено. Благодаря!

8 Solutions collect form web for “понимание вложенного списка python”

Вот как вы могли бы сделать это с помощью вложенного списка:

 [[float(y) for y in x] for x in l] 

Это даст вам список списков, аналогичный тому, с чего вы начали, кроме как с поплавками вместо строк. Если вам нужен один плоский список, вы должны использовать [float(y) for x in l for y in x] .

 >>> l = [['40', '20', '10', '30'], ['20', '20', '20', '20', '20', '30', '20'], ['30', '20', '30', '50', '10', '30', '20', '20', '20'], ['100', '100'], ['100', '100', '100', '100', '100'], ['100', '100', '100', '100']] >>> new_list = [float(x) for xs in l for x in xs] >>> new_list [40.0, 20.0, 10.0, 30.0, 20.0, 20.0, 20.0, 20.0, 20.0, 30.0, 20.0, 30.0, 20.0, 30.0, 50.0, 10.0, 30.0, 20.0, 20.0, 20.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0] 

Не уверен, каков ваш желаемый результат, но если вы используете понимание списка, порядок следует за порядком вложенных циклов, который у вас есть назад. Поэтому я получил то, что, я думаю, хочу:

 [float(y) for x in l for y in x] 

Принцип заключается в следующем: используйте тот же порядок, который вы использовали бы, чтобы записать его как вложенный для циклов.

Да, вы можете сделать это с помощью такого кода:

 l = [[float(y) for y in x] for x in l] 

Если вам не нравятся вложенные списки, вы также можете использовать функцию карты ,

 >>> from pprint import pprint >>> l = l = [['40', '20', '10', '30'], ['20', '20', '20', '20', '20', '30', '20'], ['30', '20', '30', '50', '10', '30', '20', '20', '20'], ['100', '100'], ['100', '100', '100', '100', '100'], ['100', '100', '100', '100']] >>> pprint(l) [['40', '20', '10', '30'], ['20', '20', '20', '20', '20', '30', '20'], ['30', '20', '30', '50', '10', '30', '20', '20', '20'], ['100', '100'], ['100', '100', '100', '100', '100'], ['100', '100', '100', '100']] >>> float_l = [map(float, nested_list) for nested_list in l] >>> pprint(float_l) [[40.0, 20.0, 10.0, 30.0], [20.0, 20.0, 20.0, 20.0, 20.0, 30.0, 20.0], [30.0, 20.0, 30.0, 50.0, 10.0, 30.0, 20.0, 20.0, 20.0], [100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0]] 
 In [105]: l = [[[[[[1]]]]]] In [106]: for a in l: ...: for b in a: ...: for c in b: ...: for d in c: ...: for e in d: ...: for f in e: ...: print(f) 1 In [107]: [f for a in l for b in a for c in b for d in c for e in d for f in e] #Which can be written in single line as In [107]: [f for a in l for b in a for c in b for d in c for e in d for f in e] Out[107]: [1] 

Лучший способ сделать это, на мой взгляд, – использовать пакет itertools python.

 >>>import itertools >>>l1 = [1,2,3] >>>l2 = [10,20,30] >>>[l*2 for l in itertools.chain(*[l1,l2])] [2, 4, 6, 20, 40, 60] 

Эта проблема может быть решена без использования для цикла. Для этого достаточно одного кода линии. Использование вложенной карты с функцией лямбда также будет работать здесь.

l = [[40, 20, 10, 30], [20, 20, 20, 20, 20, 30, 20, , [30, 20, 30, 50, 10, 30, 20, 20, 20,] 100, 100, '100', '100', '100', '100', '100'], ['100', '100', '100', '100']]

 map(lambda x:map(lambda y:float(y),x),l) 

И Output List будет выглядеть следующим образом:

[[40,0, 20,0, 10,0, 30,0], [20,0, 20,0, 20,0, 20,0, 20,0, 30,0, 20,0], [30,0, 20,0, 30,0, 50,0, 10,0, 30,0, 20,0, 20,0, 20,0], [100,0, 100,0], [100,0, 100,0, 100,0, 100,0, 100,0], [100,0, 100,0, 100,0, 100,0]]

  • Автоматическое упрощение / рефакторинг кода Python (например, для циклов -> понимание списка)?
  • Python - поиск инкрементных нумерованных последовательностей с пониманием списка
  • Расширение кортежей в генераторе понимания списка
  • Pythonic способ распечатать элементы списка
  • Что означает «понимание списка»? Как это работает и как я могу его использовать?
  • список вызовов функции, использующей понимание списка
  • Python, работающий со списком
  • Используя понимание списков в Python, чтобы сделать что-то похожее на zip ()?
  • Python - лучший язык программирования в мире.