Элементы списка списков разнести по двум спискам python
есть список списков формата:
[[(98, 0.454453), (678, 0.563333),(129, 0.879905)],
[(554, 0.769977), (28, 0.123533),(243, 0.986533)]]
мне необходимо данные находящиеся в до пробела и запятой, отнести к list1, а данные после пробела отнести к list2, как это лучше сдeлать?
результат должен быть такой:
list1=[98,678,129,554,28,243]
list2=[0.454453, 0.563333, 0.879905, 0.769977, 0.123533, 0.986533]
Ответы (2 шт):
Автор решения: Tehnorobot
→ Ссылка
Например, можно так (Простой вариант записи):
lsts = [[(98, 0.454453), (678, 0.563333),(129, 0.879905)], [(554, 0.769977), (28, 0.123533),(243, 0.986533)]]
list1 = []
list2 = []
for i in lsts:
for j in i:
list1.append(j[0])
list2.append(j[1])
print(list1)
print(list2)
Вывод:
[98, 678, 129, 554, 28, 243]
[0.454453, 0.563333, 0.879905, 0.769977, 0.123533, 0.986533]
Для сохранения структуры списков можно немного переписать содержимое цикла, а то есть внутри нового списка добавлять список с каждой итерацией и записывать в него данные:
for k, i in enumerate(lsts):
list1.append([])
list2.append([])
for j in i:
list1[k].append(j[0])
list2[k].append(j[1])
Вывод:
[[98, 678, 129] , [554, 28, 243]]
[[0.454453, 0.563333, 0.879905], [0.769977, 0.123533, 0.986533]]
Автор решения: CrazyElf
→ Ссылка
А на выходе обязательно списки? Вот кортежи, например:
lists = [[(98, 0.454453), (678, 0.563333),(129, 0.879905)],
[(554, 0.769977), (28, 0.123533),(243, 0.986533)]]
list1, list2 = zip(*sum(lists, []))
print(list1, list2, sep='\n')
Вывод:
(98, 678, 129, 554, 28, 243)
(0.454453, 0.563333, 0.879905, 0.769977, 0.123533, 0.986533)
Только для больших списков метод с sum медленно работает.
А так то можно и в списки перевести, но код чуть длиннее:
list1, list2 = map(list, zip(*sum(lists, [])))