Search code examples
pythonpython-2.7xlrd

Fill in spaces in list


I'm importing data with XLRD. The overall project involves pulling data from existing Excel files, but there are merged cells. Essentially, an operator is accounting for time on one of 3 shifts. As such, for each date on the grid they're working with, there are 3 columns (one for each shift). I want to change the UI as little as possible. As such, when I pull the list of the dates covered on the sheet, I want it to have the same date 3 times in a row, once for each shift.

Here's what I get:

[41665.0, '', '', 41666.0, '', '', 41667.0, '', '', 41668.0, '', '', 41669.0, '', '', 41670.0, '', '', 41671.0, '', '']

Here's what I want:

[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]

I got this list with:

dates = temp_sheet.row_values(2)[2:]

I don't know if the dates will always show up as floats. I was thinking something along the lines of:

dates = [i for i in dates if not i.isspace() else j]

It throws an error when it gets to the first value, which is a float. .isnumeric() is a string operator...there has to be a much more elegant way. I found this answer but it seems much more involved than what I believe I need.


Solution

  • I dont think this is a good application for a comprehension, and an explicit loop would be better:

    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]