我有以下功能
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
请问,请问,问题是什么? 错误是“列表索引超出范围”
答案 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)']
您在某个时间点访问空值。