2017-11-08 6 views
0

タプルのリストをタプルのリストで並べ替えるソート関数を実装しようとしていますが、関数には次のようにしたい:リスト内のインデックスでタプルをソート

def sort(list): 
    for item in list: 
     list.sort(key=lambda tuple: tuple[1]) 
    return list 

これは

listtest = [("test",2),("testtt",5),("ahj",12),("asdasd",1),("34",3)] 

が呼び出され

[('asdasd', 1), ('test', 2), ('34', 3), ('testtt', 5), ('ahj', 12)] 

を返します。

私が単にこれを使用しないのは、私が数学のバックグラウンドに由来するので、プログラミング言語にアルゴリズムを実装する方法を学ぼうとしているからです。

Iインデックスによってソート要素を行い

def my_sort(list): 
    for i in range(len(list)): 
     j = i-1 
     key = list[i] 
     while (list[j] > key) and (j >= 0): 
      list[j+1] = list[j] 
      j -= 1 
     list[j+1] = key 
    return list 

(例えば、リストは単なる要素ではなく、タプルを含むと示されている)は、以下のような作品を作ったアルゴリズム。今、私はインデックスでタプルをソートしたい部分は、私がこれまで持っていることは次のとおりです。

def sort_tuples(list): 
    for i in range(len(list)): 
     j = i - 1 
     key = list[i][1] #returns the index of tuple i 
     while (list[j][1] > key) and (j >= 0): #compares the 2nd tuples index with the first tuples index 
      list[j+1] = list[j] 
      j -= 1 
     key = list[j+1][1] # <----- problem? 
    return list 

これを実行しているとき、それはあなたがでそれを再挿入するためにlist[i]を維持する必要があり

[('test', 2), ('test', 2), ('testtt', 5), ('testtt', 5), ('ahj', 12)] 
+1

まず、変数名として "list"を使用しないでください。 "list"は組み込みの名前であるため、コードが混乱します – lpozo

答えて

0

を返します。 j番目のインデックス:パイソンの

def sort_tuples(list): 
    for i in range(len(list)): 
     j = i - 1 
     list_i = list[i] 
     key = list[i][1] 
     while (list[j][1] > key) and (j >= 0): 
      list[j+1] = list[j] 
      j -= 1 
     list[j+1] = list_i 
    return list 

print sort_tuples([("test",2),("testtt",5),("ahj",12),("asdasd",1),("34",3)]) 
0

禅は述べている:いくつかのコードが読みやすいと作業であれば、それを変更しないでください(。それは良い仕事であることが良いです。)。

def mysort(myiter): 
    result = [] 
    for i in myiter: 
     result[i[1]] = i[0] 
    return tuple(result) 

は、最も読みやすくエレガントなスニペットです。

関連する問題