我创建了一个数组,其中包含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))
我不能为我的生活弄清楚如何打破原来的阵列。
答案 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]]