将数组中的相等值分组为子数组

时间:2015-06-18 15:47:16

标签: arrays python-2.7 grouping

我创建了一个数组,其中包含excel电子表格的一列中的所有值。该列中有许多值是等效的。

我需要将所有相等的值分组到第一个数组中的各个数组中。

file_location = "C:\Users\Practice.xlsx"
workbook = xlrd.open_workbook(file_location)
sheet = workbook.sheet_by_index(0)

Date = []

for i in range(sheet.nrows-1):    
    if [sheet.cell_value(i,0) == sheet.cell_value(i+1,0)]:
        Date.append(sheet.cell_value(i,0))  
    else:
        Date.append(sheet.cell_value(i,0))

我不能为我的生活弄清楚如何打破原来的阵列。

1 个答案:

答案 0 :(得分:0)

您可以使用itertools.groupby

import xlrd, itertools

with xlrd.open_workbook("test.xlsx") as workbook:
    sheet = workbook.sheet_by_index(0)

    flat_data = (sheet.cell_value(i, 0) for i in range(sheet.nrows))
    grouped_data = [list(group) for key, group in itertools.groupby(flat_data)]

或者,如果您更喜欢更“手动”的方法,则可以使用[-1]访问分组数据列表中的最后一个组。只需将新值与该组中的值进行比较(如果有),或者添加新组。

    grouped_data = [[]]
    for i in range(sheet.nrows):    
        d = sheet.cell_value(i, 0)
        if not grouped_data[-1] or grouped_data[-1][-1] == d:
            grouped_data[-1].append(d)
        else:
            grouped_data.append([d])

两种方式,grouped_data最终都是(对于我的test.xlst):

[[1.0, 1.0, 1.0], [2.0, 2.0, 2.0], [3.0, 3.0], [4.0, 4.0, 4.0, 4.0], [5.0, 5.0, 5.0], [6.0, 6.0]]