通过索引检查数组元素是否存在并删除重复项

时间:2021-07-18 20:07:44

标签: python arrays numpy

我有一个这样的数组:

array1=[[a,b,c,d],
       [e,f,g,h],
       [k,l,m,d],
       [x,y,j,d],
       [p,r,s,z]]

我想要一个这样的数组:

array2=[[a,b,c,d],
       [e,f,g,h], 
       [p,r,s,z]]

例如,array1[0][3]=d 现在是 uniq。

你能帮忙吗,我如何用 Python 编写程序?

2 个答案:

答案 0 :(得分:0)

您可以跟踪到目前为止在 set 中看到的内容并循环遍历数组。如果集合中没有来自子列表的项(交集为空集),则将其附加到结果并将其元素添加到集合中。

seen = set()
result = []

for sub in array1:
    if not seen.intersection(sub):
        result.append(sub)
        for l in sub:
            seen.add(l)

结果:

[['a', 'b', 'c', 'd'], 
 ['e', 'f', 'g', 'h'], 
 ['p', 'r', 's', 'z']]

答案 1 :(得分:0)

另一种解决方案(不使用集合)是将 array1 复制到 array2,遍历 array1 的行和项,并从 array2 中删除之前已经看到其项的任何行:

array2 = list(array1)
seen = []
for row in array1:
    for item in row:
        if item in seen:
            array2.remove(row)
            break
        seen.append(item)

print(array2)
#[['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h'], ['p', 'r', 's', 'z']]