如何删除重复的数组元素并在python中保持第一次出现?
我有以下大小为(5,2)的numpy数组: 我想删除所有重复的行(在本例中为[4,3]),保留第一个匹配项并返回如下所示:如何删除重复的数组元素并在python中保持第一次出现?,python,arrays,Python,Arrays,我有以下大小为(5,2)的numpy数组: 我想删除所有重复的行(在本例中为[4,3]),保留第一个匹配项并返回如下所示: A = [[5,6] [4,3] [2,1] [8,9]] A=[[5,6], [4,3], [2,1], [4,3], [8,9]] B=集合(映射(元组,A)) 印刷品(B) 在不失去秩序的情况下: uniq = [] for i in A: if not i in uniq: uniq.appe
A = [[5,6]
[4,3]
[2,1]
[8,9]]
A=[[5,6],
[4,3],
[2,1],
[4,3],
[8,9]]
B=集合(映射(元组,A))
印刷品(B)
在不失去秩序的情况下:
uniq = []
for i in A:
if not i in uniq:
uniq.append(i)
print('l=%s' % str(A))
print('uniq=%s' % str(uniq))
函数numpy.unique可以帮助您从数组中提取唯一值。指定轴参数以选择要操作的轴。
试试这个
提取唯一行。numpy.unique将返回一个排序数组。如果要检索原始顺序,可以使用return_index=True参数返回唯一元素第一次出现的索引,然后从原始数组中获取这些元素。 对于您的示例,这将起作用:
A[np.sort(np.unique(a, return_index=True, axis=0)[1])]
使用转换为字符串的值作为键。展开dict以获取唯一元素的列表
list(dict([[str(x),x] for x in A]).values())
真遗憾,你把名单的顺序搞乱了。我添加了两个选项。我使用的是numpy数组而不是列表。数组没有append特性,但在一个更复杂的示例中使用了它,它没有删除它们的重复行或保留order@Iceans我很抱歉误会了你。np.unique不保持顺序,它按排序顺序返回元素。我更新了我的答案,告诉你如何保持秩序。@Iceans另外,确保你的axis参数是正确的。如果仍然不起作用,请提供更复杂的示例。@redgen有没有办法向您发送一些代码?我还是不能把它弄到手work@Iceans不幸的是,stackoverflow上没有私人消息。您可以编辑您的问题并添加此代码或添加一些外部链接。我很乐意帮助你。
A[np.sort(np.unique(a, return_index=True, axis=0)[1])]
list(dict([[str(x),x] for x in A]).values())