Сгладить список списков
У меня проблема с квадратными скобками в Python. Я написал код, который производит следующий вывод:
[[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
Но я хотел бы выполнить некоторые вычисления с этим, но квадратные скобки не позволят мне.
Как удалить скобки? Я видел несколько примеров для этого, но я не мог применить их к этому делу.
Ответы
Ответ 1
Сгладить список, чтобы "удалить скобки", используя понимание вложенного списка. Это приведет к тому, что каждый список будет сохранен в списке списков!
list_of_lists = [[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
flattened = [val for sublist in list_of_lists for val in sublist]
Вложенные проверки списка оцениваются так же, как они разворачиваются (т.е. добавляют новую строку и вкладку для каждого нового цикла, поэтому в этом случае:
flattened = [val for sublist in list_of_lists for val in sublist]
эквивалентно:
flattened = []
for sublist in list_of_lists:
for val in sublist:
flattened.append(val)
Большая разница в том, что список comp вычисляет MUCH быстрее, чем распущенный цикл и исключает вызовы append!
Если у вас есть несколько элементов в подсписке, список comp даже сгладит это. то есть
>>> list_of_lists = [[180.0, 1, 2, 3], [173.8], [164.2], [156.5], [147.2], [138.2]]
>>> flattened = [val for sublist in list_of_lists for val in sublist]
>>> flattened
[180.0, 1, 2, 3, 173.8, 164.2, 156.5, 147.2,138.2]
Ответ 2
Я бы использовал itertools.chain
- это также будет обслуживать > 1 элемент в каждом подсписке:
from itertools import chain
list(chain.from_iterable([[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]))
Ответ 3
Учитывая
d = [[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
Использование списка:
new_d = [i[0] for i in d]
предоставит вам этот
[180.0, 173.8, 164.2, 156.5, 147.2, 138.2]
то вы можете получить доступ к отдельным элементам с соответствующим индексом, например, new_d[0]
предоставит вам 180.0
и т.д., которые вы затем можете использовать для математики.
Если у вас будет коллекция данных, у вас будет какая-то скобка или скобки.
Примечание, это решение специально предназначено для вашего вопроса/проблемы, оно не дает обобщенного решения. I.e., он будет работать для вашего дела.
Ответ 4
>>> lis=[[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
>>> [x[0] for x in lis]
[180.0, 173.8, 164.2, 156.5, 147.2, 138.2]