如何对数组中的项目进行分组?

时间:2015-08-22 13:51:22

标签: python list python-3.x

我有一系列项目(每月的数字),现在我想按月分组,所以我想转此:

(1, True), ... (31, True), (1, False) ...(28, True),...

进入这个:

[(1, True), ... (31, True)], [(1, False) ...(28, True)],...

我正在使用python 3.我应该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用生成器函数,每次第一个值下降而不是向上时生成一个新组:

def group_by_month(items):
    month = []
    for day, flag in items:
        if month and month[-1][0] > day:
            # new month starting
            yield month
            month = []
        month.append((day, flag))
    if month:
        yield month

您可以迭代生成的月份,也可以将所有月份收集在一个大列表中:

grouped = list(group_by_month(items))

答案 1 :(得分:0)

以下内容应该有效:

days = [(1, True), (2, False), (31, True), (1, False), (2, True)]
month = []
grouped_by_month = []
last = (0, False)

for pair in days:
    if pair < last:
        grouped_by_month.append(month)
        month = []
    month.append(pair)
    last = pair
grouped_by_month.append(month)

print(grouped_by_month)

,并提供:

[[(1, True), (2, False), (31, True)], [(1, False), (2, True)]]