Подтвердить что ты не робот

Сгладить список списков

У меня проблема с квадратными скобками в Python. Я написал код, который производит следующий вывод:

[[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]

Но я хотел бы выполнить некоторые вычисления с этим, но квадратные скобки не позволят мне.

Как удалить скобки? Я видел несколько примеров для этого, но я не мог применить их к этому делу.

4b9b3361

Ответ 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]