2013-08-07 3 views
0

У меня есть следующие функцииPython: разбор вопроса на пустые значения

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

Вы раскалывают на запятую, но с двумя запятыми бок о бок вы будете иметь пустые строки в результате:

>>> 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)' 
+0

спасибо за предложения! –

0

Функция сплит создает пустое значение «» в приведенном списке.

«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)']

В какой-то момент вы получаете пустое значение.

Смежные вопросы