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

时间:2017-04-26 18:35:47

标签: python python-2.7 list python-3.x

假设我有这些列表:

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. 结尾的上一个项目
  6. 检查收集的项目是否具有相同的数字(e.g. '2010a' and '2010b', but not '2013a' and '2014b')并根据需要生成子列表。
  7. 上述步骤有效,但很长。我想知道python库中是否有任何代码/技巧可以使代码更短,看起来更清晰/更优雅。

1 个答案:

答案 0 :(得分:3)

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

json_file = {
    "User": "2145",
    "Item": {
        "123456": {
            "process1": [],
            "process2": [],
        },
    },
}

然后,您可以itertools.groupby使用>>> 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'] lambda来按字母对字符串进行分组:

x[:4]

>>> 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']] 期望字符串已经排序,这似乎就是这种情况。

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