如何按指定规则将一维数组转换为无重复的二维数组?
一维数组转无重复逆序二维数组的解决方案
你的代码没得到期望结果的核心问题是:双重循环里j从0开始,会同时生成正序和逆序的子数组(比如('A1','A2')和('A2','A1')),而np.unique只能识别完全相同的数组,没法处理逆序这种“逻辑重复”。另外虽然你加了x[i] != x[j]的判断,但其实可以通过调整循环起始位置直接避免无效情况。
修改后的代码
import numpy as np x = ("A1", "A2", "A3", "A4") arr = [] for i in range(len(x)): # 让j从i的下一个索引开始,直接跳过同元素和逆序场景 for j in range(i + 1, len(x)): arr.append((x[i], x[j])) mylist = np.array(arr) print(mylist)
逻辑说明
- 避免同元素子数组:
j从i+1开始,i和j永远不会相等,自然不会出现['A1','A1']这类子数组; - 避免逆序重复:每个子数组的第一个元素都是原数组中靠前的元素,第二个是靠后的,不会生成
('A2','A1')这种逆序对,从根源上杜绝了逻辑重复,不需要后续去重; - 如果你处理的原数组可能包含重复元素,可以在循环里加个判断
if x[i] != x[j],但针对你的输入示例,这一步完全不需要。
运行这段代码后,输出就是你期望的结果:
[['A1' 'A2'] ['A1' 'A3'] ['A1' 'A4'] ['A2' 'A3'] ['A2' 'A4'] ['A3' 'A4']]
内容的提问来源于stack exchange,提问作者Камаль
相关产品推荐
相关产品推荐

