【发布时间】:2016-05-03 15:27:00
【问题描述】:
我已经在一定程度上解决了这个问题,我只是想找出一种更有效的方法来解决这个问题。我有一个大列表,我正在尝试将大列表中的每个列表相互比较。
如何避免重复比较,比较已经比较过的列表?
例如:big_list[0] 已与 big_list[20] 进行比较,因此没有理由在循环稍后将 big_list[20] 与 big_list[0] 进行比较。
big_list= [[0.12, 0.939, -0.321, 6.342], [0.12, 0.939, -0.321,6.342], [0.0, 1.0, -0.0, -5.166], [0.0, 1.0, 0.0, -5.166], [0.0, 1.0, -0.0, -5.166], [-0.0, 1.0, 0.0, -5.166], [0.0, 1.0, 0.0, -5.166], [0.0, 1.0, 0.0, -5.166], [0.0,1.0, -0.0, -5.166], [0.0, 1.0, 0.0, -5.166], [-0.0, 1.0, -0.0, -5.166], [-0.0, 1.0, 0.0, -5.166], [-0.12, 0.939, 0.321, 0.282], [-0.12, 0.939, 0.321, 0.282], [0.12, 0.939, 0.321, -17.782], [0.12, 0.939, 0.321, -17.782], [-0.0, 1.0, 0.0, 0.834], [0.0, 1.0, 0.0, 0.834], [0.0, 1.0, 0.0, 0.834], [0.0, 1.0, 0.0, 0.834], [-0.12, 0.939, -0.321, 24.406], [-0.12, 0.939, -0.321, 24.406], [0.0, 0.874, -0.486, 21.883], [0.0, 0.874, -0.486, 21.883], [0.0, 0.874, 0.486, -14.598], [0.0, 0.874, 0.486, -14.598]]
for j in range(len(big_list)):
for k in range(len(big_list)):
if j!=k:
result=math.sqrt(sum([(a-b)**2 for a,b in zip(big_list[j],big_list[k])])))
以前,我通过设置特定容差并将每个结果附加到新列表来解决此问题,但我正在尝试提出一种更有效的方法来执行此操作。最终,big_list 可能会拥有超过 100 万个列表
if result<=rel_tol and big_list[k] not in new_list:
new_list.append(big_list[k])
【问题讨论】:
-
你为什么要把它们相互比较?如果要对列表进行排序,您可以指定
key,它将任何逻辑应用于每个元素并进行比较。 -
列表是否可以间接包含自身?
-
例如
a = []; a.extend([a,(a,)])
标签: python algorithm list data-structures