1

次のようないくつかのサブリストで構成される単純なリストがあります。

a = [[4, 3, 2, 1], [5, 8, 7, 6], [12, 11, 10, 9]]

サブリストの要素に従ってa[1]降順でこれをソートする必要があるため、次のようになります。

sorted_a = [(3, 2, 1, 4), (8, 7, 6, 5), (11, 10, 9, 12)]

私はソートを使用してみました:

sorted_a = sorted(a, key=lambda x: -x[2])

しかし、それは返します:

[[12, 11, 10, 9], [5, 8, 7, 6], [4, 3, 2, 1]]

これは私がまったく必要としているものではありません。

4

3 に答える 3

1

おそらくこれはあなたが探しているものです:

a = [[4, 3, 2, 1], [5, 6, 7, 8], [12, 11, 10, 9]]
[sorted(list) for list in a]

戻り値:[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

または、さらに最初の要素で並べ替えたい場合は、次のようにします。

a = [[4, 3, 2, 1], [12, 11, 10, 9], [5, 6, 7, 8]]
sorted([sorted(list) for list in a], key=min)

また、以下を返します。[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

于 2013-11-01T00:08:38.917 に答える
0

これは紛らわしいように聞こえます;-)コメントから、a[1]を逆ソートする順列を取り、その順列をすべてのサブリストに適用したいように思えます。まあ、そのためのワンライナーはめちゃくちゃあいまいです. したがって、これを行う簡単な方法は次のとおりです。

a = [[4,3,2,1], [5,6,7,8], [12,11,10,9]]
# compute the permutation needed to reverse-sort a[1]
decorated = [(v, i) for i, v in enumerate(a[1])]
decorated.sort(reverse=True)
perm = [i for v, i in decorated]
for sublist in a:
    sublist[:] = [sublist[i] for i in perm]
print a
于 2013-11-01T00:15:14.473 に答える