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

Grouping equal values from an array into subarrays

我创建了一个数组,其中包含 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))

我这辈子都想不出如何分解原始数组。

您可以使用 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)]

或者如果您更喜欢 "manual" 方法,您可以使用 [-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]]