我有一个包含以下内容的整数列表:
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]不应该存在的位置。希望对此有所帮助
答案 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)复杂性。
修改: 我没有完全阅读您的描述。由于您需要原始数组中的索引,因此只需将二者作为键/值对输入即可。