0

私は、リスト、、、rootなどのリストを持っています。root[child0]root[child1]

ルート リストの子を、子リストの最初の値である で並べ替えたいと考えていroot[child0][0]ますint

例:

import random
children = 10
root = [[random.randint(0, children), "some value"] for child in range(children)]

rootそれぞれの子の最初の要素で最大から最小に並べ替えたいです。

sorted()使用した以前のエントリと、lamdaまったくなじみのない関数を調べたので、それを問題に適用する方法がわかりません。

与えられた方向性に感謝する

ありがとう

4

3 に答える 3

3

ソート順を決定するkey関数を指定できます。

sorted(root, key=lambda x: x[0], reverse=True)

あなたはラムダに慣れていないと言いました。まず、これを読んでください。次に、スキニーを提供します。ラムダはf = lambda x: x[0]、形式をとる無名関数です (変数 a la に割り当てない限り) lambda arguments: expression。これexpressionは、ラムダによって返されるものです。したがって、ここでの key 関数は 1 つの引数 を取りx、 を返しますx[0]

于 2013-07-03T16:50:37.683 に答える
1

key項目の比較に使用する関数または項目をパラメーターで指定できます。

key = lambda x : x[0]

以上:key = operator.itemgetter(0)

または、必要に応じて独自の関数を定義して に渡すこともできますkey

>>> root = [[random.randint(0, children), "some value"] for child in range(children)]
>>> root
[[3, 'some value'], [8, 'some value'], [5, 'some value'], [4, 'some value'], [3, 'some value'], [3, 'some value'], [2, 'some value'], [5, 'some value'], [5, 'some value'], [4, 'some value']]
>>> root.sort(key = lambda x : x[0], reverse = True)
>>> root
[[8, 'some value'], [5, 'some value'], [5, 'some value'], [5, 'some value'], [4, 'some value'], [4, 'some value'], [3, 'some value'], [3, 'some value'], [3, 'some value'], [2, 'some value']]

または使用operator.itemgetter

>>> from operator import itemgetter
>>> root.sort(key = itemgetter(0), reverse = True)
>>> root
[[8, 'some value'], [5, 'some value'], [5, 'some value'], [5, 'some value'], [4, 'some value'], [4, 'some value'], [3, 'some value'], [3, 'some value'], [3, 'some value'], [2, 'some value']]
于 2013-07-03T16:49:56.793 に答える
0

これは、Python がデフォルトでソートする方法とは逆であるため、keyこの場合、引数は不要ですreverse。引数を単独で使用できます...

>>> import random
>>> import pprint
>>> root = [[random.randint(0, children), "some value"] for child in range(children)]
>>> pprint.pprint(root)
[[0, 'some value'],
 [2, 'some value'],
 [3, 'some value'],
 [1, 'some value'],
 [1, 'some value'],
 [1, 'some value'],
 [3, 'some value'],
 [7, 'some value'],
 [7, 'some value'],
 [8, 'some value']]
>>> root.sort(reverse=True)
>>> pprint.pprint(root)
[[8, 'some value'],
 [7, 'some value'],
 [7, 'some value'],
 [3, 'some value'],
 [3, 'some value'],
 [2, 'some value'],
 [1, 'some value'],
 [1, 'some value'],
 [1, 'some value'],
 [0, 'some value']]
于 2013-07-03T16:52:18.123 に答える