0

我有以下功能

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

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

4

2 回答 2

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

过滤掉空值;usingfilter(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)'
于 2013-08-07T11:31:22.327 回答
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)']

因为 "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)']

您在某个时候访问了一个空值。

于 2013-08-07T11:34:49.317 回答