Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 选择列表中最早的条目_Python_List_Sorting - Fatal编程技术网

Python 选择列表中最早的条目

Python 选择列表中最早的条目,python,list,sorting,Python,List,Sorting,如果我有一个名单,上面有人的名字和日期,我只想保留每个人最早的日期,我该怎么做?我希望最终的列表按姓氏字母顺序排列,然后是名字,并且只包含末尾日期最早的条目 这是一个列表的例子,我试过了,但它又给了我同样的列表 L1=['Smith, John, 1994', 'Smith, John, 1996', 'Smith, John, 1998', 'Smith, Joan, 1993', 'Smith, Joan, 1995', 'Smith, Jack, 1989', 'Smith, Jack,

如果我有一个名单,上面有人的名字和日期,我只想保留每个人最早的日期,我该怎么做?我希望最终的列表按姓氏字母顺序排列,然后是名字,并且只包含末尾日期最早的条目

这是一个列表的例子,我试过了,但它又给了我同样的列表

L1=['Smith, John, 1994', 'Smith, John, 1996', 'Smith, John, 1998', 'Smith, Joan, 1993', 'Smith, Joan, 1995', 'Smith, Jack, 1989', 'Smith, Jack, 1991', 'Jones, Adam, 2000', 'Jones, Adam, 1998', 'Jones, Sarah, 2002', 'Jones, Sarah, 2005', 'Brady, Tom, 2001', 'Brady, Tonya, 2002']

L1.sort()

L2= []

for item in L1:
    if item.split(',')[:2] not in L2:
        L2.append(item)
最终产品应如下所示:

L2=['Brady, Tom, 2001', 'Brady, Tonya, 2002', 'Jones, Adam, 1998', 'Jones, Sarah, 2002', 'Smith, Jack, 1989', 'Smith, Joan, 1993', 'Smith, John, 1994']
任何帮助或见解都将不胜感激

试试看

L1.sort()
[next(j) for i, j in itertools.groupby(L1, lambda x: x.rsplit(",", 1)[0])]

您的代码不起作用,因为您正在搜索
L2
中的
项。拆分(',')[:2]
,这只是名称。但是列表中的字符串由名称和年份组成——这就是为什么
not in
总是产生
True

Python内置的列表和元组排序是递归的。如果您的数据是这样存储的:

>>> from itertools import groupby
>>> [next(j) for i, j in groupby(sorted(L1), lambda x: x.rpartition(",")[0])] == L2
True
L1=[(1,2,3),
    (2,3,4),
    (1,1,3)]
它将按每个元组中的第一项对列表进行排序,然后按第二项对每个组进行排序,依此类推。结果是:

[(1, 1, 3), (1, 2, 3), (2, 3, 4)]

因此,如果您将字符串分成
(日期、最后一个、第一个)
的元组,然后进行排序,您将获得所需的顺序,但随后您必须将字符串重新缝合在一起。

只需添加
sorted()
,就可以了perfect@marsx:没有明确表示,但是你应该
导入itertools
然后:)这个:)做什么/它去哪里了?现在它告诉我“下一个”的名字没有定义。@marsx:这一点都不好笑了。你使用的是什么版本的python?@marsx:提问是很好的——这就是这个网站的目的。递归排序不是这个意思。它到底与这个问题有什么关系?OP使用的是4位数的年份,它们在一个字符串内可以很好地排序。