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

2024-10-02 14:16:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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']

实现这一目标的最佳方法是什么?你知道吗


Tags: 方法元素示例目标列表排序顺序字母
3条回答

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

>>> sorted(map(lambda x: sorted(x[:2]) + [x[2]], li))
[['a', 'u', 'asdgasdgasdgasd'],
 ['h', 'j', 'asdgasdgasdgasdgas'],
 ['i', 'o', 'sdagasdgasdgdsag'],
 ['m', 'z', 'asdgwergerwhwre']]
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']]

您可以使用内置方法^{}来完成其中的一些工作。如果你想反转列表的打印方式,就必须反转列表的顺序,但这并不太难。你知道吗

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])。你知道吗

相关问题 更多 >

    热门问题