Mam listę list w Pythonie z dwiema wartościami zmiennoprzecinkowymi na każdej liście. Chciałbym iterować na liście list, ale chcę przechowywać pierwszą listę w wynikowej liście i porównywać każdą następną listę z poprzednią i jeśli różni się od poprzedniej listy, to ponownie muszę zapisać tę listę na wynikowej liście .
list_of_lists = [[0.9953129999999999, 13.625421], [0.9953129999999999, 13.625421],[0.9953129999999999, 13.625421], [0.9953129999999999, 13.625421], [0.9953129999999999, 13.625421], [1.6215, 3.26078], [1.6215, 3.26078], [1.6215, 3.26078], [1.6215, 3.26078], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.9050619999999998, 0.011995], [1.9050619999999998, 0.011995], [1.9050619999999998, 0.011995], [1.9050619999999998, 0.011995],[1.7293490000000002, 1.5182360000000001]]
Moje początkowe podejście jest takie;
resulting_list = []
resulting_list.insert(0,list_of_list[0])
print (resulting_list)
for index, rows in list_of_lists:
if ...
Z góry dziękuję!
2 odpowiedzi
Jesteś prawie na miejscu, umieściłeś pierwszą podlistę w wynikowych listach. a następnie iteruj po pozostałych elementach, możesz następnie sprawdzić, czy bieżąca podlista jest zgodna z ostatnią podlistą w wynikowej liście, a jeśli tak nie jest, to umieść tę podlistę.
list_of_lists = [[0.9953129999999999, 13.625421], [0.9953129999999999, 13.625421], [0.9953129999999999, 13.625421],
[0.9953129999999999, 13.625421], [0.9953129999999999, 13.625421], [1.6215, 3.26078], [1.6215, 3.26078],
[1.6215, 3.26078], [1.6215, 3.26078], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871],
[1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871],
[1.0, 12.25871], [1.0, 12.25871], [1.0, 12.25871], [1.9050619999999998, 0.011995],
[1.9050619999999998, 0.011995], [1.9050619999999998, 0.011995], [1.9050619999999998, 0.011995],
[1.7293490000000002, 1.5182360000000001]]
resulting_list = [list_of_lists[0]]
for sub_list in list_of_lists[1:]:
if sub_list != resulting_list[-1]:
resulting_list.append(sub_list)
print(resulting_list)
WYJŚCIE
[[0.9953129999999999, 13.625421], [1.6215, 3.26078], [1.0, 12.25871], [1.9050619999999998, 0.011995], [1.7293490000000002, 1.5182360000000001]]
Myślę, że to, czego szukasz, to klasyczna operacja „redukcja” na liście. W ten sposób nie potrzebujesz pętli for:
import functools
def reducer(x,y):
if(len(x)==0 or x[-1]!=y): return(x+[y])
return(x)
functools.reduce(reducer, list_of_lists, list())
Zaczynasz z pustą listą jako wartością początkową akumulatora i dodajesz nowe elementy, jeśli różnią się od ostatnio dodanych.
Wynik:
[[0.9953129999999999, 13.625421], [1.6215, 3.26078], [1.0, 12.25871], [1.9050619999999998, 0.011995], [1.7293490000000002, 1.5182360000000001]]
Jeśli chcesz być jeszcze bardziej zwięzły, możesz przekazać anonimową funkcję lambda bezpośrednio w wywołaniu, aby zredukować
functools.reduce(lambda x, y: x+[y] if(len(x)==0 or x[-1]!=y) else x, list_of_lists, list())
Podobne pytania
Nowe pytania
python-3.x
W przypadku pytań dotyczących programowania w języku Python, które są specyficzne dla wersji 3+ tego języka. Użyj bardziej ogólnego tagu [python] we wszystkich pytaniach Pythona i dodaj ten tylko, jeśli twoje pytanie dotyczy wersji. Użyj znaczników [python-2.x] w pytaniach o Python 2.