2015-08-22 81 views
0

我有一個項目(日在月號)的陣列,現在我要按月組他們,所以我希望把這個:如何將數組分組?

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

進入這個:

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

我使用python 3.我應該怎麼做?

+0

你如何識別月份?還是假定列表中的每一天都是(非跳躍)年? – veggie1

+0

該月是所有項目之間的值爲1的項目,包括值爲1的第一個值 – maxpovver

回答

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)) 
+0

謝謝,這有幫助! – maxpovver

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)]] 
相關問題