请帮忙。 我在输入脚本中有不同的值,只需删除相同的值。
我这样做但是没有检查值的类型,只是没找到它。
示例:
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]
由于
答案 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
函数将其转换回整数以供使用。