【问题标题】:Python remove from list the same valuesPython从列表中删除相同的值
【发布时间】:2015-05-04 06:55:05
【问题描述】:

请帮忙。 我在输入脚本中有不同的值,只需要删除相同的值。

我这样做了,但没有检查值的类型,只是没有找到它。

例子:

import sys
def clean_list(list_to_clean):
        c = []
        c = list(set(list_to_clean))
        return c
c= clean_list(sys.argv[1:])
print c

import sys
def clean_list(list_to_clean):
        c = []
        for i in list_to_clean:
                if i not in c:
                        c.append(i)
        return c
c= clean_list(sys.argv[1:])
print c

所以我的问题是,当我输入发送值时:

'asd', 'dsa', 1, '1', 1.0

它回来了:

['asd', 'dsa', 1, '1']

但需要:

['asd', 'dsa', 1, '1', 1.0]

谢谢

【问题讨论】:

  • 如果这是您想要的行为,您将需要添加显式检查 - 1.0 in (1,) 会评估真值,尽管 1.0 is 1 不会。

标签: python arrays function


【解决方案1】:

由于 int 1 和 float 1.0 哈希值相同,因此您需要保留有关对象的更多信息——它的“类型”是这里的最佳候选者。如果你愿意,你可以在一个班轮中做到这一点:

>>> seq = ['asd', 'dsa', 1, '1', 1.0, 'asd', 'dsa', 1]
>>> [pair[1] for pair in {(type(obj), obj,) for obj in seq}]
['asd', 'dsa', 1, 1.0, '1']

再分解一下,集合理解:

pairs = {(type(obj), obj,) for obj in seq}

在元组中保留 obj 的类型,这样它就不会丢失。然后列表理解只是取回值(而不是类型):

final_answer = [pair[1] for pair in pairs] 

顺便说一句,您可以使用内置的 hash 函数来查看 python 将使用什么值来进行字典/集散列:

>>> hash(1.0)
1
>>> hash(1)
1

这在文档中有详细说明——事实上,他们提到了 1 和 1.0 的情况。

【讨论】:

    【解决方案2】:

    Python 自动缩短整数,当清理代码看到它时,它认为它是重复的。尝试将其存储为字符串'1.0',然后使用int 函数将其转换回整数以供使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 2021-03-15
      • 1970-01-01
      • 2015-02-04
      相关资源
      最近更新 更多