gpt4 book ai didi

python - 使用第二列对二维数组进行排序,如果第二列中的元素相同,则按第一列排序

转载 作者:太空宇宙 更新时间:2023-11-03 15:43:10 25 4
gpt4 key购买 nike

我编写了一个 python 程序,使用第二列对二维数组进行排序,并且如果第二列中的元素与第一列的排序相同。虽然我用我基本的Python知识解决了这个问题。 我认为还可以改进。谁能帮忙优化一下吗?还请建议使用其他数据类型进行排序是否是一个不错的选择?

#created a two dimensional array
two_dim_array=[[2, 5], [9, 1], [4, 8], [10, 0], [50, 32], [33, 31],[1, 5], [12, 5], [22, 5], [32, 5], [9, 5],[3, 31], [91, 32] ]
#get the length of the array
n_ship=len(two_dim_array)
#sorting two dimensional array by using second column
sort_by_second_column=sorted(two_dim_array, key=lambda x: x[1], reverse=False)
#declared new variable for storing second soeted array
new_final_data=[]
#parameter used to slice the two dimensional column
first_slice=0
#tmp=[]
index=[0]
for m in range(1, n_ship):
#print('m is: '+str(m)+'final_data[m-1][1] is: '+str(final_data[m-1][1])+'final_data[m][1] is: '+str(final_data[m][1]))
#subtracting second column elements to detect changes and saved to array
if(abs(sort_by_second_column[m-1][1]-sort_by_second_column[m][1])!=0):
index.append(m)
# print(index)
l=1
# used the above generated index to slice the data
for z in range(len(index)):
tmp=[]
if(l==1):
first_slice=0
last=index[z+1]
mid_start=index[z]
# print('l is start'+ 'first is '+str(first_slice)+'last is'+str(last))
v=sort_by_second_column[:last]

elif l==len(index):
first_slice=index[z]
# print('l is last'+str(1)+ 'first is '+str(first_slice)+'last is'+str(last))
v=sort_by_second_column[first_slice:]
else:
first_slice=index[z]
last=index[z+1]
#print('l is middle'+str(1)+ 'first is '+str(first_slice)+'last is'+str(last))
v=sort_by_second_column[first_slice:last]


tmp.extend(v)
tmp=sorted(tmp, key=lambda x: x[0], reverse=False)
#print(tmp)
new_final_data.extend(tmp)
# print(new_final_data)
l+=1


for l in range(n_ship):
print(str(new_final_data[l][0])+' '+str(new_final_data[l][1]))


''' Input
2 5
9 1
4 8
10 0
50 32
33 31
1 5
12 5
22 5
32 5
9 5
3 31
91 32

Output
10 0
9 1
1 5
2 5
9 5
12 5
22 5
32 5
4 8
3 31
33 31
50 32
91 32'''

最佳答案

您应该阅读有关 sorted() 的文档,因为这正是您需要使用的: https://docs.python.org/3/library/functions.html#sorted

newarray=sorted(two_dim_array, key=lambda x:(x[1],x[0]))

输出:

[10, 0]
[9, 1]
[1, 5]
[2, 5]
[9, 5]
[12, 5]
[22, 5]
[32, 5]
[4, 8]
[3, 31]
[33, 31]
[50, 32]
[91, 32]

关于python - 使用第二列对二维数组进行排序,如果第二列中的元素相同,则按第一列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41973873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com