gpt4 book ai didi

python - 如何从列表中提取某些项目?

转载 作者:行者123 更新时间:2023-11-30 22:38:15 25 4
gpt4 key购买 nike

假设我有这些列表:

a = ['2009','2010a','2010b','2011','2012a','2012b','2012c','2013a','2014b'] 
b = ['2008a','2008b']

我需要编写一个代码来提供以下列表:

#If I provide list a as the input:
a1 = ['2010a','2010b']
a2 = ['2012a','2012b','2012c']
a3 = ['2013a']
a4 = ['2014b']

#If I provide list b as the input:
b1 = ['2008a','2008b']

目前,我执行以下操作:

  1. 迭代输入列表中的每个项目
  2. 检查每一项的最后一个字符串是否是字母 (e.g. a of '2010a')
  3. 检查下一项的最后一个字符串是否也是字母 (e.g. '2010a' and '2010b')
  4. 继续检查,直到下一项的最后一个字符串不是字母 (e.g. '2010a','2010b','2011')并收集以前以字母结尾的项目 (e.g. '2010a' and '2010b')
  5. 检查收集的项目是否具有相同的数字 (e.g. '2010a' and '2010b', but not '2013a' and '2014b')并根据需要生成子列表。

上述步骤有效,但相当长。我想知道 python 库中是否有任何代码/技巧可以使代码更短并且看起来更干净/更优雅。

最佳答案

您首先需要检查最后一个字符是否是字母:

>>> a = ['2009','2010a','2010b','2011','2012a','2012b','2012c','2013a','2014b']
>>> number_and_letters = [x for x in a if x[-1].isalpha()]
['2010a', '2010b', '2012a', '2012b', '2012c', '2013a', '2014b']

然后您可以使用 itertools.groupby使用 x[:4]lambda 按数字对字符串进行分组:

>>> import itertools
>>> list(list(words) for year, words in itertools.groupby(number_and_letters, lambda x: x[:4]))
[['2010a', '2010b'], ['2012a', '2012b', '2012c'], ['2013a'], ['2014b']]

groupby 期望字符串已经排序,这里似乎就是这种情况。

最后,您将得到一个列表作为输出,而不是 4 个不同的变量。通常,使用 4 个元素的列表比使用 4 个不同的变量要容易得多。

关于python - 如何从列表中提取某些项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43642051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com