Python 3.x 通过比较下一个列表和上一个列表并存储唯一列表,在Python中迭代列表列表
我有一个python列表,每个列表中有两个浮点值。我想对列表列表进行迭代,但我希望将第一个列表存储在结果列表中,并将下一个列表与前一个列表进行比较,如果它与前一个列表不同,那么我需要再次将该列表存储在结果列表中 [0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999991999,13.6254421.6252521,13.6254421,[0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999,13.625.625.625252525252525252525,13.625252525252525252525 7 7 7 7 7 7,13.625[0[0[0 0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999,13.9,13.13.625,13.625,13.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]] 我最初的做法是这样的,Python 3.x 通过比较下一个列表和上一个列表并存储唯一列表,在Python中迭代列表列表,python-3.x,list,loops,compare,store,Python 3.x,List,Loops,Compare,Store,我有一个python列表,每个列表中有两个浮点值。我想对列表列表进行迭代,但我希望将第一个列表存储在结果列表中,并将下一个列表与前一个列表进行比较,如果它与前一个列表不同,那么我需要再次将该列表存储在结果列表中 [0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999991999,13.6254421.62525
resulting_list = []
resulting_list.insert(0,list_of_list[0])
print (resulting_list)
for index, rows in list_of_lists:
if ...
提前感谢!您就快到了,您将第一个子列表放入结果列表中。然后迭代剩余的项目,您可以检查当前子列表是否与结果列表中的最后一个子列表匹配,如果不匹配,则添加此子列表
list of_list=[[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]]
结果_列表=[_列表的列表[0]]
对于列表中的子列表[1:]:
如果子_列表!=结果_列表[-1]:
结果_列表。追加(子_列表)
打印(结果列表)
输出
[[0.9953129999999999,13.625421],[1.6215,3.26078],[1.0,12.25871],[1.905061999999998,0.011995],[1.729349000000002,1.5182360000000001]]
我认为您需要的是列表上的经典“reduce”操作。这样您就不需要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())
以空列表作为累加器的初始值开始,如果新元素与上次添加的元素不同,则继续添加新元素
输出:
[[0.9953129999999999, 13.625421], [1.6215, 3.26078], [1.0, 12.25871], [1.9050619999999998, 0.011995], [1.7293490000000002, 1.5182360000000001]]
如果您想更加简洁,可以在reduce调用中直接传递匿名lambda函数
functools.reduce(lambda x, y: x+[y] if(len(x)==0 or x[-1]!=y) else x, list_of_lists, list())
您期望生成的_列表的输出是什么样子的?我希望看到2D numpy数组中的输出,但列表或列表列表中的输出也可以工作。例如,目前生成的_列表看起来是这样的[[0.99531299999999,13.625421]]