从python中的列表中取非重复值

时间:2017-04-28 04:11:17

标签: python python-2.7 list

我正在用Python编程。我有一个变量node,它带有以下值:

 node = (87.0921419983132, 106.6283716496173)
        (86.77840486780269, 97.63384170009026)
        (78.16407779475766, 95.02743246925114)
        (70.02882757413327, 91.17805539655082)
        (61.50050332176587, 88.30269708036101)
        (54.98537952281276, 82.09357782846105)
        (46.833207518576465, 78.2801683810838)
        (37.86736484348003, 77.49680057129092)
        (29.816754354836903, 73.47341011545032)
        (20.822013250759838, 73.78103402646268)
        (87.0921419983132, 106.6283716496173)
        (86.77840486780269, 97.63384170009026)
        (78.16407779475766, 95.02743246925114)
        (70.02882757413327, 91.17805539655082)
        (61.50050332176587, 88.30269708036101)
        (54.98537952281276, 82.09357782846105)
        (46.833207518576465, 78.2801683810838)
        (37.86736484348003, 77.49680057129092)
        (29.816754354836903, 73.47341011545032)
        (20.822013250759838, 73.78103402646268)
        (87.0921419983132, 106.6283716496173)
        (86.77840486780269, 97.63384170009026)
        (78.16407779475766, 95.02743246925114)
        (70.02882757413327, 91.17805539655082)
        (61.50050332176587, 88.30269708036101)
        (54.98537952281276, 82.09357782846105)
        (46.833207518576465, 78.2801683810838)
        (37.86736484348003, 77.49680057129092)
        (29.816754354836903, 73.47341011545032)
        (20.822013250759838, 73.78103402646268)
        (87.0921419983132, 106.6283716496173)
        (86.77840486780269, 97.63384170009026)
        (78.16407779475766, 95.02743246925114)

所以它会无限期地重复。

我需要创建一个包含第一个循环值的列表,因为重复的值对我不感兴趣。

我正在使用

 lst = [node]
 new= []
 for i in lst:
     if i not in new:
          new.append(i)
          print new

但是这会返回并打印相同的节点变量值。

我的错误是什么?

2 个答案:

答案 0 :(得分:0)

你已经做了一切正确的事情,除了新列表的打印,这应该完全没有缩进,正如VBB指出的那样。

答案 1 :(得分:0)

正如其他人所评论的,您的代码看起来不像Python。

我假设您的node变量是元组的列表或元组。

node = [(87.0921419983132, 106.6283716496173),
        (86.77840486780269, 97.63384170009026),
        ... ...]

在这种情况下,您只需使用

创建一个“uniq'ed”元组
uniq_node = list(set(node))

如果订购不重要。

如果您希望保留订单,因为每个项目都显示在原始序列中,您可以尝试

seen = set()
uniq_node = []
for item in node:
    if item in seen:
        continue
    seen.add(item)
    uniq_node.append(item)

值得一提的是浮点精度。如果你确定你只想删除位级别的重复项,这很好。如果您还需要删除接近看到的项目,可能是由于数字不准确,这会中断。在这种情况下,您需要构建一个空间树并查找近邻而不是完全匹配。