Python从列表中删除相同的值

时间:2015-03-03 14:56:14

标签: python arrays function

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

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

示例:

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]

由于

2 个答案:

答案 0 :(得分:4)

由于int 1和float 1.0哈希值相同,因此您需要保留有关该对象的更多信息 - 它' type'是这里最好的候选人。如果您愿意,可以在单行中执行此操作:

>>> 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的情况。

答案 1 :(得分:0)

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