将两个列表排序在一起

2024-10-01 05:01:52 发布

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

我有两个列表:结果、发生时间 我想根据发生的时间对它们进行排序

这些是列表的打印输出:

    result is        ['3 - 1', '1 - 2', '0 - 0', '2 - 1', '2 - 3', '2 - 0' ...]
    occurredtimes is [322 , 423, 269, 643, 114, 565 ...]

我需要的输出是

    result           ['2 - 1', '2 - 0', '1 -2', '3 - 1', '0 - 0', '2 - 3' ...]
    occurredtimes    [643 , 565, 423, 322, 269, 114 ...]

我试图把它们分类,但我无法得到我需要的;对不起,我相信这是一个简单的代码

我试了以下方法

    result, occurredtimes = (list(t) for t in zip(*sorted(zip(result, occurredtimes))))

Tags: 方法代码in列表for排序is时间
3条回答

您可以使用sorted()并传递lambda函数来根据发生时间对它们进行排序

In [9]: result = ['3 - 1', '1 - 2', '0 - 0', '2 - 1', '2 - 3', '2 - 0' ]

In [10]: ocurredtimes= [322 , 423, 269, 643, 114, 565]

In [11]: new_res=list( zip( result, ocurredtimes))


In [13]: new_res
Out[13]:
[('3 - 1', 322),
 ('1 - 2', 423),
 ('0 - 0', 269),
 ('2 - 1', 643),
 ('2 - 3', 114),
 ('2 - 0', 565)]


In [15]: sorted(new_res, key=lambda x:x[1],reverse=True) #sorted OUTPUT 
Out[15]:
[('2 - 1', 643),
 ('2 - 0', 565),
 ('1 - 2', 423),
 ('3 - 1', 322),
 ('0 - 0', 269),
 ('2 - 3', 114)]

您还可以使用list的sort函数,并将相同的lambda函数作为参数传递。那就行了

欲知详情12

>>> result, occurredtimes = zip(*sorted(zip(result, occurredtimes), key = lambda i: i[1], reverse=True))
>>> result
('2 - 1', '2 - 0', '1 - 2', '3 - 1', '0 - 0', '2 - 3')
>>> occurredtimes
(643, 565, 423, 322, 269, 114)

其工作方式是,您基本上可以zip按元素将列表组合在一起。然后,您可以根据来自occurredtimes[1]元素进行排序,并使用reverse=True进行降序排序

>>> sorted(zip(result, occurredtimes), key = lambda i: i[1], reverse=True)
[('2 - 1', 643), ('2 - 0', 565), ('1 - 2', 423), ('3 - 1', 322), ('0 - 0', 269), ('2 - 3', 114)]

最后一个zip(*sorted(是再次将已排序的元组解压回两个单独的列表中

尝试:

result, occurredtimes=zip(*sorted(zip(result, occurredtimes), key=lambda k: k[1], reverse=True))

产出:

('2 - 1', '2 - 0', '1 - 2', '3 - 1', '0 - 0', '2 - 3')
(643, 565, 423, 322, 269, 114)

相关问题 更多 >