Python,列表理解

Python,列表理解,python,split,anaconda,Python,Split,Anaconda,我对编码非常陌生,所以我希望我能得到一个更能理解的答案,而不是它的效率。我有一个由如下字符串组成的列表: 月份=['04','04','04','04','04','04',', ‘05’、‘05’、‘05’、‘05’、‘05’、‘05’、‘05’、‘05’、‘05’、‘06’、‘07’、‘07’、‘08’、‘09’、‘10’、‘11’、‘12’、‘1’、‘2’、‘3’、‘4’] 我正在尝试按值拆分此列表,即我希望输出如下所示: 所列月份=['04','04','04','04','04'],[

我对编码非常陌生,所以我希望我能得到一个更能理解的答案,而不是它的效率。我有一个由如下字符串组成的列表:

月份=['04','04','04','04','04','04',', ‘05’、‘05’、‘05’、‘05’、‘05’、‘05’、‘05’、‘05’、‘05’、‘06’、‘07’、‘07’、‘08’、‘09’、‘10’、‘11’、‘12’、‘1’、‘2’、‘3’、‘4’]

我正在尝试按值拆分此列表,即我希望输出如下所示:

所列月份=['04','04','04','04','04'],['05','05','05','05','05','05','05'],…['04']

注意:尽管最后一个元素已经有了一个列表,但它仍然有自己的列表,这一点非常重要

我首先要做的是:

months = ['04', '04', '05', '05', '05', '06', '07', 
'07', '08', '09', '10', '11', '12', '1', '2', '3', '4']

listed_months = []
per_month = []
for i in range(0, len(months)):
    if months[i] == months[1+1]:
        per_month.append(months[i])
    elif months[i] != months[1+1]:
        per_month = []
        months = month[i+1]
        listed_months.append(per_month)
我遇到一个问题,即如果我要完成这个循环,索引将超出范围,因为我强制了最后一个值。
我感觉我就快到了,但如果能帮上忙,我将不胜感激

如果您想自己实现这一点,我可以找到以下最简单的方法:

months = [
    '04', '04',
    '05', '05', '05',
    '06',
    '07', '07',
    '08',
    '09',
    '2',
    '3',
    '4', '4'
]

result = [[months[0]]]

for m in months[1:-1]:
    om = "%02d" % int(m)
    if om == result[-1][-1]:
        result[-1].append(om)
    else:
        result.append([om])
result.append(["%02d" % int(months[-1])])

print(result)
以上内容适用于长度为2或2以上的列表。如果您想要/需要,您可以为琐碎的案例添加处理。其思想是,对于从第二个到第二个到最后一个的每个项目,如果该项目等于该子列表中的最后一个项目,则将其附加到结果中的最后一个子列表,否则将附加一个单例列表

最后一项只是作为单例列表添加到结果的末尾

本例的输出为:

[['04', '04'], ['05', '05', '05'], ['06'], ['07', '07'], ['08'], ['09'], ['02'], ['03'], ['04'], ['04']]

这有一个内置函数itertools.groupby,您只需使用[listg for ug,itertools.groupbymonds中的[listg]。手动执行此操作时,我会注意到月[1+1]应该是月[I+1],在任何情况下,跟踪最后看到的值比向前看更容易,如果值相等,则附加到临时列表,否则,将临时列表附加到最终列表,初始化新的空列表并将值附加到该列表。。。然后别忘了在最后检查是否有一个临时列表要追加。月[1+1]应该是月[i+1]对于这样的列表,不明显的是什么行为是预期的['1',2',1',2',3']-如果它导致['1',['2',]['2',['1',['2',['3']]或['1',1',['2',2',['3']]?@juanpa.arrivillaga将不起作用。OP只需要最后一个值。@Tarik当然可以。itertools.groupby就是这样工作的。