基于两个不同列表项并重新排序/重新洗牌的多项目排序?

时间:2012-01-05 19:18:11

标签: python sorting

我有一个嵌套列表,如下所示:

li = [['m', 'z', 'asdgwergerwhwre'], 
      ['j', 'h', 'asdgasdgasdgasdgas'], 
      ['u', 'a', 'asdgasdgasdgasd'], 
      ['i', 'o', 'sdagasdgasdgdsag']]

我想按字母顺序对此列表进行排序,但是要使用每个子列表中的第一个或第二个元素。对于上面的示例,所需的输出将是:

['a', 'u', 'asdgasdgasdgasd']
['h', 'j', 'asdgasdgasdgasdgas']
['i', 'o', 'sdagasdgasdgdsag']
['m', 'z', 'asdgwergerwhwre']

实现这种目标的最佳方式是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用内置方法sorted()来完成其中的一些操作。如果你想要改变它的打印方式,你就必须颠倒列表的顺序,但这并不难做到。

def rev(li):
    for l in li:
        l[0], l[1] = l[1], l[0]
    return li

new_list = sorted(rev(li))

如果您想根据特定索引对列表进行排序,可以使用sorted(li, key=lambda li: li[index])

答案 1 :(得分:1)

作为第一步,我们执行一些转换(交换前两项 - 如果需要)和第二步简单排序:

>>> sorted(map(lambda x: sorted(x[:2]) + [x[2]], li))
[['a', 'u', 'asdgasdgasdgasd'],
 ['h', 'j', 'asdgasdgasdgasdgas'],
 ['i', 'o', 'sdagasdgasdgdsag'],
 ['m', 'z', 'asdgwergerwhwre']]

答案 2 :(得分:0)

import pprint
li = [['m', 'z', 'asdgwergerwhwre'],
      ['j', 'h', 'asdgasdgasdgasdgas'],
      ['u', 'a', 'asdgasdgasdgasd'],
      ['i', 'o', 'sdagasdgasdgdsag']]

for _list in li:
    _list[:2]=sorted(_list[:2])

pprint.pprint(sorted(li))

>>>
[['a', 'u', 'asdgasdgasdgasd'],
 ['h', 'j', 'asdgasdgasdgasdgas'],
 ['i', 'o', 'sdagasdgasdgdsag'],
 ['m', 'z', 'asdgwergerwhwre']]