著作権:転載へようこそが、ソースおよび記事の著者を明記してください。https://blog.csdn.net/handsomehuo/article/details/90343889
実際、新興の問題でソート機能
これは、雪峰Pythonのチュートリアルの宿題、関数型プログラミングの問題のソート()関数が遭遇遼です。
質問を見てください:私たちは名前とタプルのセットで生徒の学力を表すと仮定し、使用してくださいsorted()
それぞれ、上記のリストに名前でソートを。
エラーコードを見て、何が悪かったのかご覧ください。
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_score(t):
for i in range(len(t)):
return (t[i][1])
def by_name(t):
for i in range(len(t)):
return (t[i][0])
L2 = sorted(L, key=by_name)
print(L2)
L3 = sorted(L, key=by_score)
print(L3)
#输出结果
#[('Adam', 92), ('Bob', 75), ('Bart', 66), ('Lisa', 88)]
#[('Bart', 66), ('Adam', 92), ('Lisa', 88), ('Bob', 75)]
プログラム全体が与えられていないが、出力が正しくありません、分析、ミスを犯しました。
。1、ソート()関数は、誤ってソート自動的リストLの反復サイクル、タプルの各出力に使用され、したがってby_nameとby_scoreを循環させるために提供される必要はありません。
このされていない指定されたコード、なぜこの出力それについて考えることを続行しますか?
まず結論:
図1に示すように、ループは、コード内で実行されていないため、LEN(t)はタプル型、LEN(T)= 2であるが、ソート()ので、私はいつも0〜1であり、実行されない、[I] Tそう常に[0] Tに等しいです。
2、T [i]が[0]とt [i]は数[1]の値?T [0] [0]とt [0] [1]ビットにソートされ、0とビット1のSTR T [0]の文字!
3、結論1及び2に関連して、名前が実際に最初の文字と第二の文字を並べ替えています。
今、正しいコードを見てください。
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_score(t):
return(t[1])
def by_name(t):
return(t[0])
L2 = sorted(L, key=by_name)
print(L2)
L3 = sorted(L, key=by_score)
print(L3)
#输出
#[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
#[('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]
誤って、我々はに学びます:
1、正しい使用のソート()関数
2、リストやタプルの添字の使用