将值追加到列表中,没有重复项

时间:2018-09-08 02:39:49

标签: python list

我有一个包含以下内容的整数列表:

intlist = [19,4,2,4]

并且我想将整数列表中的值附加到列表列表中,例如:

noDuplist = [[19,0],[4,1],[2,2]]

其中,第一个索引表示intlist中的值,第二个索引表示intlist中值的索引。 19在索引0处,4在索引1处,而2在索引2处。由于还有另外4个,我不想将其包括在内,因为我不想重复,因此最后4个将被忽略。 / p>

我尝试过类似的事情:

noDuplist = []
for i in range(len(intlist)):
    if intlist[i] not in noDuplist:
        noDuplist.append([intlist[i],i])

但是我仍然得到

[[19, 0], [4, 1], [2, 2], [4, 3]]

[4,3]不应该存在的位置。希望对此有所帮助

2 个答案:

答案 0 :(得分:1)

我假设您想保留原始序列中的索引。 因此,您想要的是可以记住什么索引值的东西 首先出现在原始序列中。

问题出在你身上

if intlist[i] not in noDuplist:
   # something

将检查4中是否存在[[19, 0], [4, 1], [2, 2]]]

更干净的方法是使用字典或集合。

intlist = [19,4,2,4]
seen_so_far, noDuplist = set(), []

for i, v in enumerate(intlist):
    if v not in seen_so_far:
        noDuplist.append([v, i])
        seen_so_far.add(v)

print(noDuplist)

哪个给出输出[[19, 0], [4, 1], [2, 2]]

答案 1 :(得分:0)

我建议的第一件事是不要费心存储索引和值。无论如何,在提取元素时您都会知道索引。

我想到的第一种方法(不确定是否最佳)涉及将字典与列表结合使用。每当您尝试插入一个值时,请检查它是否存在于字典中。如果不是,请将其添加到词典和您的列表中。如果是这样,请不要添加它。

这将导致O(N)复杂性。

修改: 我没有完全阅读您的描述。由于您需要原始数组中的索引,因此只需将二者作为键/值对输入即可。