我正在使用XLRD导入数据。整个项目涉及从现有Excel文件中提取数据,但是有合并的单元格。从本质上讲,运营商在3个班次中的一个时间计算时间。因此,对于他们正在使用的网格上的每个日期,有3列(每个班次一列)。我想尽可能少地更改UI。因此,当我拉出工作表上所涵盖的日期列表时,我希望它连续3次具有相同的日期,每个班次一次。
这是我得到的:
[41665.0, '', '', 41666.0, '', '', 41667.0, '', '', 41668.0, '', '', 41669.0, '', '', 41670.0, '', '', 41671.0, '', '']
这就是我想要的:
[41665.0, 41665.0, 41665.0, 41666.0, 41666.0, 41666.0, 41667.0, 41667.0, 41667.0, 41668.0, 41668.0, 41668.0, 41669.0, 41669.0, 41669.0, 41670.0, 41670.0, 41670.0, 41671.0, 41671.0, 41671.0]
我得到了这个清单:
dates = temp_sheet.row_values(2)[2:]
我不知道日期是否会一直显示为花车。我正在思考以下几点:
dates = [i for i in dates if not i.isspace() else j]
当它到达第一个值(它是一个浮点数)时会抛出一个错误。 .isnumeric()是一个字符串运算符......必须有一个更优雅的方式。 I found this answer但它似乎比我认为我需要的更多。
答案 0 :(得分:1)
我不认为这是一个理解的好应用程序,显式循环会更好:
lst = [41665.0, '', '', 41666.0, '', '', 41667.0, '', '', 41668.0, '', '', 41669.0, '', '', 41670.0, '', >>> lst = [41665.0, '', '', 41666.0, '', '', 41667.0, '', '', 41668.0, '', '', 41669.0, '', '', 41670.0, '', '', 41671.0, '', '']
>>> temp = lst[0]
>>> nlst = []
>>> for i in lst:
... if i: temp = i
...
... nlst.append(temp)
...
>>> nlst
[41665.0, 41665.0, 41665.0, 41666.0, 41666.0, 41666.0, 41667.0, 41667.0, 41667.0, 41668.0, 41668.0, 41668.0, 41669.0, 41669.0, 41669.0, 41670.0, 41670.0, 41670.0, 41671.0, 41671.0, 41671.0]
答案 1 :(得分:0)
另一种解决方案,
>>> l = [41665.0, '', '', 41666.0, '', '', 41667.0, '', '', 41668.0, '', '', 41669.0, '', '', 41670.0, '', '', 41671.0, '', '']
>>> lst = [ item for item in l if item is not '']
>>> [ v for item in zip(lst,lst,lst) for v in item ]
[41665.0, 41665.0, 41665.0, 41666.0, 41666.0, 41666.0, 41667.0, 41667.0, 41667.0, 41668.0, 41668.0, 41668.0, 41669.0, 41669.0, 41669.0, 41670.0, 41670.0, 41670.0, 41671.0, 41671.0, 41671.0]