在 Python 中使用一列值对二维数组进行对角线排序

Sort a 2-dimensional array diagonally with a column of values in Python

提问人:Trung The Shrimp 提问时间:11/1/2023 最后编辑:Trung The Shrimp 更新时间:11/1/2023 访问量:80

问:

如何按列对值进行排序,假设我有一个二维数组,如下所示: [A、B、C、D、E、F、G、H] [1, 3, 5, 7, 8, 1, 2, 2] 我希望它按底行数字的降序排序,例如: [英、丁、丙、乙、克、高、亚、法] [8, 7, 5, 3, 2, 2, 1, 1] 对不起,如果我的英语不好:(

这是我尝试计算字母表出现的时间

s = str(input()).upper()
z = list(set(s))
z.sort()
if z[0]==' ':
    z.remove(z[0])
kitu = [z, [' ']* (len(z))]
dem = []
for i in range(len(z)):
    kitu[1][i] = s.count(z[i])
    dem.append(s.count(z[i]))

我正在使用 Python,并且很陌生,感谢您的帮助 <3

Python 数组 排序

评论

1赞 Guy 11/1/2023
为什么预期结果的值较少?
0赞 Trung The Shrimp 11/1/2023
我的坏,我的坏,对不起
0赞 user19077881 11/1/2023
你有列表列表,而不是行中的数组,列意义。最好转换为 Numpy 数组,然后排序非常简单。
0赞 aneroid 11/1/2023
你为什么在你尝试的解决方案中?您是否期望第一个列表中的所有元素都是唯一的?您是否知道将其转换为 a 然后再转换回 a 会更改原始顺序?z = list(set(s))setlistlist(set(a)) != a
1赞 zvone 11/1/2023
@user19077881 为什么对于这么小的数据集,转换为numpy会更好?对于初学者来说,如何比普通的 Pyrrhon 更容易理解 numpy API?

答:

0赞 Shubh 11/1/2023 #1

正如@guy提到的,您的预期结果具有较小的值,但我认为您可能会期待这一点 -

a = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] # row1
b= [1, 3, 5, 7, 8, 1, 2, 2] # row2
d = dict(zip(a,b)) # create dictionary
#sort the dictionary {key:value} in descending order by it's value element
sorted_dict = dict(sorted(d.items(), key=lambda elem: elem[1], reverse=True))
# Convert the dict into 2D array
arr = [[k,v]for k,v in sorted_dict.items()]
print(arr)

希望这有帮助!

评论

0赞 aneroid 11/1/2023
如果去掉末尾的部分,排序后提取元组的第 0 个元素,则 OP 直接得到字母列表: → .此外,如果重复其中的任何元素,则制作字典将不起作用。然而,OP在他们尝试的解决方案中,这可能是也可能不是他们真正想要的。dict(...)d.items()[x[0] for x in sorted(d.items(), key=lambda elem: elem[1], reverse=True)]['E', 'D', 'C', 'B', 'G', 'H', 'A', 'F']az = list(set(s))
0赞 Shubh 11/1/2023
是的,没错!