Python:查找列表元素,其中一部分作为副本。只要有逻辑就足够了

Python:查找列表元素,其中一部分作为副本。只要有逻辑就足够了,python,list,Python,List,我想保留最后一个元素,因为它具有最新的时间戳MonDayYear\u HrMinSec List1 = ['ABCD_123.A_062320_082824', 'ABCD_123.A_062320_094024','ABCD_123.A_063020_084447'] 我尝试了正则表达式,但我不知道如何检查相应的组。我是否要对组2和组3使用if条件检查,并保持组1或类似的内容?您想要这样做(假设结构是name\u date\u time): 说明: 将元素按'拆分,扔掉日期和时间,将其余元

我想保留最后一个元素,因为它具有最新的时间戳
MonDayYear\u HrMinSec

List1 = ['ABCD_123.A_062320_082824', 'ABCD_123.A_062320_094024','ABCD_123.A_063020_084447']
我尝试了正则表达式,但我不知道如何检查相应的组。我是否要对组2和组3使用if条件检查,并保持组1或类似的内容?

您想要这样做(假设结构是
name\u date\u time
):

说明

  • 将元素按
    '
    拆分,扔掉日期和时间,将其余元素按
    '
    合并形成名称
  • 使用groupby按名称分组,然后对每个组进行排序
  • 选择排序组中的最后一个(如果排序,则最新日期和时间将排在最后)
输出(请注意,在此解决方案中,元素的顺序可能不同。如果需要保持顺序,只需保持名称的顺序并按该顺序重新排序即可):

另一个例子:

['ABCD_123.A_063020_084447']
输出:


名称结构是否总是
name\u date\u time
?并且,您的代码实际上不会检查前缀是否相同。会有不同前缀的项目吗?实际上你并没有保留所有的时间戳。也许用一个更复杂的输入示例发布您想要的输出是什么?@Ehsan是的。结构始终是name\u date_time@Ram那么贴出的答案应该对你有帮助。谢谢。@user120242是的,我本来打算这么做的。检查前缀是否相同,然后查找相应的日期和时间,并保留具有最新时间戳的列表元素。但不知道这样做的逻辑。
from itertools import groupby
out = [sorted(list(v))[-1] for k,v in groupby(sorted(List1), key=lambda x: '_'.join(x.split('_')[:-2]))]
['ABCD_123.A_063020_084447']
List1 = ['ABCE_123.A_062320_082824', 'ABCE_123.A_062320_094024','ABCD_123.A_063020_084447']
['ABCD_123.A_063020_084447', 'ABCE_123.A_062320_094024']