1

名前と各名前の成績のリストが与えられるタスクを完了する必要があり、これらを最高の成績から最低の成績順に並べ替える必要があります。ただし、2 つの名前の成績が同じ場合は、それらの名前をアルファベット順に並べ替えます。これが私が提示された問題です。ソート機能を 1 行に収める必要があります。

a = [('Tim Jones', 54), ('Anna Smith', 56), ('Barry Thomas', 88)]
sum(sorted(a,key=lambda x: x[1]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'

これを解決する方法について何か考えはありますか? 私は何日もそれを解決しようとしました。

更新しました

それを解決するのを手伝ってくれてありがとう、しかし、私も解決する必要がある別のシナリオがあります.

a = [('Tim Jones', 'C'), ('Anna Smith', 'B'), ('Barry Thomas', 'A')]
sorted(a,key=lambda x: -x[1])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: bad operand type for unary -: 'str'

これが現在の状況です。基本的に私が今しなければならないのは、リストを整理することだけです。それで、それは最高学年から最低学年へと続きます。

4

2 に答える 2

2

sorted() 関数はタプルリストを返します。sum() は一連の数値を受け取ると仮定しているため、それらを合計することはできません。

2 つ目は、x[1] が文字列であるのに対し、x[1] の前にマイナス (-) があるためです。負の文字列は使用できません。

>>> a = [('Tim Jones', 'C'), ('Anna Smith', 'B'), ('Barry Thomas', 'A')]
>>> sorted(a,key=lambda x: x[1])

学年が同じ場合に名前をアルファベット順に並べ替える場合は、tuple (x[1],x[0]) を並べ替えキーとして使用します。

>>> a = [('Tim Jones', 54), ('Anna Smith', 56), ('Barry Thomas', 88),('Array Thomas', 88)]
>>> sorted(a,key=lambda x: (x[1],x[0]))
[('Tim Jones', 54), ('Anna Smith', 56), ('Array Thomas', 88), ('Barry Thomas', 88)]
于 2014-11-20T00:16:57.207 に答える
1

sorted()元のリストのコピーを返しますが、ソートされていることに注意してください。

>>> a = [('Tim Jones', 54), ('Anna Smith', 56), ('Barry Thomas', 88)]
>>> sorted(a,key=lambda x: x[1])
[('Tim Jones', 54), ('Anna Smith', 56), ('Barry Thomas', 88)]

Python 自体は、これら 3 つのタプルを合計しようとすると失敗します。これは、実際には明確な意味がないためです。

('Tim Jones', 54)
('Anna Smith', 56)
('Barry Thomas', 88)
于 2014-11-19T23:22:49.217 に答える