1

2番目の列を使用して2次元配列をソートするPythonプログラムを作成し、最初の列で並べ替えます。私は私の初歩的なpythonの知識でこの問題を解決しましたが。 改善できると思います。誰もそれを最適化することができますか? ソートに他のデータ型を使用するのがよい選択肢であることを示唆してください。2番目の列を使用して2次元配列をソート2番目の列の要素が同じ列1番目の列で並べ替え

#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''' 

答えて

1

これはあなたが使用する必要が正確に何であるとして、あなたは、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] 
+0

はあなたにTrelzevirを@Thank。私はあなたの提案に取り組むでしょう。 – curious

+1

'itemgetter(1、0)'をキーとして使うこともできます。これは実質的にラムダと同じです。 –

関連する問題