Python 从列表中删除相同的值

标签 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]

谢谢

最佳答案

由于 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/

相关文章:

C++程序陷入循环

python - Pandas Dataframe.groupby() 用于相同值的不同组

python - 将一组 n 个整数转换为一个 n 个整数列表的时间复杂度是多少?

python - 转义字符串 Python for MySQL

arrays - 有哪些跨时间压缩数据的好方法?

ios - RESideMenu-两个数组

python - Pandas XLSXWriter - 返回而不是写入

arrays - 如何搜索字符串中正则表达式模式的重叠匹配项

c++ - 函数重载的最大数量?

javascript - 如何生成一个可以被另一个随机生成的数字整除的随机数