3

私はPythonを学ぼうとしていますが、そのような問題に直面しました。

私はリストを持っています:

a = [[10,5],[9,3],[16,2],[8,8]]

divion arr[i][0]/arr[i][1] の値で desc にソートされるリストを取得したいと考えています。たとえば、リストa(ソート後)の場合、次のものが必要です。

a =[[8,8],[10,5],[9,3],[16,2]]

a.sort(key = lambda .....) で lambda を使用しようとしましたが、失敗しました。

それがどうあるべきかを理解するのを手伝ってくれませんか?

4

2 に答える 2

3

sorted()などと一緒に使用しkeyます。

>>> a = [[10,5],[9,3],[16,2],[8,8]]
>>> sorted(a, key= lambda x: x[0]/x[1])
[[8, 8], [10, 5], [9, 3], [16, 2]]

ドキュメントから、

key specifies a function of one argument that is used to extract a comparison key from each list element

ここで、lambda関数は最初の要素を 2 番目の要素で割った答えを返します。

lambda x: x[0]/x[1]
于 2013-07-08T06:45:06.113 に答える
2

Python2 を使用しているか Python3 を使用しているかはわかりません。Python2 では、浮動小数点除算であることを確認する必要があります

>>> a = [[10,5],[9,3],[16,2],[8,8]]
>>> sorted(a, key=lambda x: float(x[0]) / x[1])
[[8, 8], [10, 5], [9, 3], [16, 2]]

0で割る可能性がある場合は、次のようなものが必要になります

>>> sorted(a, key= lambda x: float(x[0])/x[1] if x[1] else float('inf'))>>> from 

別の方法はFraction、 の精度の問題を回避する を使用することですfloat。残念ながらFraction2.4 では利用できません

fractions import Fraction
>>> sorted(a, key=lambda x:Fraction(*x))
[[8, 8], [10, 5], [9, 3], [16, 2]]
于 2013-07-08T06:46:57.557 に答える