Python:解析空值的问题

时间:2013-08-07 11:27:01

标签: python parsing

我有以下功能

def best(x):
    xx = min(x.split(","), key=lambda x: re.findall("\d+.\d+", x.split()[0]))
    source = xx.split()[1][1:-1]
    value = re.findall("\d+.\d+", xx.split()[0])[0]
    return value,source

完美适用于此

3.4-10.4 (BDB),0.1-15.2 (BDB),0.2-17 (BDB) # working great

但不适用于此

3.4-10.4 (BDB),,0.1-15.2 (BDB),0.2-17 (BDB) # not working

请问,请问,问题是什么? 错误是“列表索引超出范围”

2 个答案:

答案 0 :(得分:2)

你正在分裂逗号,但是并排使用两个逗号,结果中会有空字符串:

>>> x = '3.4-10.4 (BDB),,0.1-15.2 (BDB),0.2-17 (BDB)'
>>> x.split(',')
['3.4-10.4 (BDB)', '', '0.1-15.2 (BDB)', '0.2-17 (BDB)']

这会在尝试进一步拆分该空字符串时导致空列表:

>>> x.split(',')[1].split()
[]

导致[0]上的索引错误。

过滤掉空值;使用filter(None, ..)可以很好地做到这一点:

xx = min(filter(None, x.split(",")), key=lambda x: re.findall("\d+.\d+", x.split()[0]))

演示:

>>> min(filter(None, x.split(",")), key=lambda x: re.findall("\d+.\d+", x.split()[0]))
'0.1-15.2 (BDB)'

答案 1 :(得分:0)

split函数在结果列表中创建一个空值“”。

'3.4-10.4(BDB),0.1-15.2(BDB),0.2-17(BDB)'。split(',')返回['3.4-10.4(BDB)','0.1-15.2(BDB) ','0.2-17(BDB)']

as“3.4-10.4(BDB),, 0.1-15.2(BDB),0.2-17(BDB)”返回['3.4-10.4(BDB)','','0.1-15.2(BDB)', '0.2-17(BDB)']

您在某个时间点访问空值。