假设我有这些列表:
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']
目前,我执行以下操作:
(e.g. a of '2010a')
(e.g. '2010a' and '2010b')
(e.g. '2010a','2010b','2011')
,并收集以字母(e.g. '2010a' and '2010b')
(e.g. '2010a' and '2010b', but not '2013a' and '2014b')
并根据需要生成子列表。上述步骤有效,但很长。我想知道python库中是否有任何代码/技巧可以使代码更短,看起来更清晰/更优雅。
答案 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个不同的变量通常要容易得多。