请帮忙。 我在输入脚本中有不同的值,并且只需要删除相同的值。
我这样做了,但没有检查值的类型,只是没有找到它。
示例:
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]
谢谢
最佳答案
由于 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 的情况。
关于Python 从列表中删除相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28834921/