質問5 Pythonの初心者

著作権:転載へようこそが、ソースおよび記事の著者を明記してください。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、リストやタプルの添字の使用

おすすめ

転載: blog.csdn.net/handsomehuo/article/details/90343889