将数组中的相等值分组到子数组中
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]]
我创建了一个数组,其中包含 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]]