如果之后有其他值,则删除列表值

时间:2013-09-20 14:15:06

标签: python list xlrd

我有一个包含多行数据的excel文件,但也有很多空格。主要的问题是,我的加权平均值之前有一天数据的常规平均值,然后是第二天的许多空格。因此,当我使用xlrd将其拉出时,我得到一个非常混乱的数组。

我想我知道如何摆脱空白区域,但是我的列表中有一些数据没有加权平均值。所以我需要搜索我的列表并删除其后没有空格的任何值,然后搜索列表并删除所有空格。

例如我想要这个:

[754, 753.554, '', '', '', '', '', 653.455, '', '', 258, 235.6464, '' , '', '']

返回:

[753.554, 653.455, 235.6464]

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

>>> l = [754, 753.554, '', '', '', '', '', 653.455, '',
         '', 258, 235.6464, '' , '', '']
>>> filter(None, [i for i, j in zip(l, l[1:] + ['']) if j == ''])
[753.554, 653.455, 235.6464]

答案 1 :(得分:2)

实际上这已经足够了:

data = filter(None, [754, 753.554, '', '', '', '', '', 653.455, '', '', 258, 235.6464, '' , '', ''])

假设weighted average将是浮动数字:

filter(lambda x: not isinstance(x, int),filter(None, a))

但您也可以使用以下函数替换lambda x: not isinstance(x, int)

def is_not_weight_avg(x):
    # do stuff here
    # if it is w. avg.
    return x 

然后你可以将上面一行写成:

filter(is_weight_avg,filter(None, a)). 

这是Python中的一些函数式编程。说明:

b=range(1,11)

def is_odd(x):
   if x % 2:
      return 0
   else:
      return x
filter(is_odd, b)
>>> [2, 4, 6, 8, 10]