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