繁体   English   中英

复杂的python列表处理

[英]Complex python list processing

我有一个由用户名和时间戳元组组成的python列表。 想象一下它如下:

[(username,datetime_obj),(username,datetime_obj),(username,datetime_obj),(username,datetime_obj),(username,datetime_obj),(username,datetime_obj),(username,datetime_obj),(username,datetime_obj),(username,datetime_obj)]

接下来,假设上面的列表只有3个唯一的用户名,但所有日期时间对象都是唯一的。

从上面的列表中获取新列表的最有效,pythonic方法是什么,它再次由元组和相同的用户名组成,除了每个用户名旁边, 列表中最新的datetime_obj (对于该特定用户名)是反复附着。

例如,如果起始列表是[(sam,1),(sam,7),(sam,8),(jon,4),(mel,9),(mel,2),(mel,10),(jon,3),(jon,6)] ,我最终得到[(sam,1),(sam,1),(sam,1),(jon,3),(mel,2),(mel,2),(mel,2),(jon,3),(jon,3)]

我使用int来描述上面示例中的datetime对象。 这只是为了简单起见。

提前致谢。

我认为你无法绕过列表两次:

most_recent = {}
for user, date in myList:
    most_recent[user] = max(most_recent.get(user, date), date)

newList = [(user, most_recent[user]) for user, _ in myList]

你可以做这样的事情,如果你认为这更像pythonic,但它更慢(二次复杂度),所以实际上不要这样做:

[(user, max(date for u, date in myList if u == user)) for user, _ in myList]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM