2015-04-02 3 views
1
string_list = ['[pool]\n', 'pool_name\n', 'node_name ip_address port\n', 'node_name ip_address port\n', 'node_name ip_address port\n', '[/pool]\n', '[pool]\n', 'pool_name\n', 'node_name ip_address port\n', 'node_name ip_address port\n', 'node_name ip_address port\n', '[/pool]\n'] 
for i in range(len(string_list)): 
    print string_list[i] 
    if string_list[i] == 'pool_name': 
     print "here" 

Что мне не хватает в этом коде. Условие if не возвращает true.если условие не возвращается true

+0

При использовании как индекс и значение элемента по индексу, рекомендуется использовать 'enumerate'! :) – Shashank

ответ

2

Попробуйте

if string_list[i].strip() == 'pool_name': 

Поскольку

>>>>"pool_name\n".strip() # this will strip out \n, \r, \t, " ", 
"pool_name" 

ИЛИ

if string_list[i] == 'pool_name\n': 
0

В списке значение 'pool_name\n', не 'pool_name' (разница в \n полукокса, символ новой строки). Либо сделать:

if string_list[i] == 'pool_name\n': 

Или:

if string_list[i].strip() == 'pool_name': 
2

Вы отсутствуют в выписке

Все ваши строки в списке на \n имеют \n в конце

for i in range(len(string_list)): 
    print string_list[i] 
    if string_list[i] == 'pool_name\n': #Missing here 
     print "here" 

Выход после изменения заявления

[pool] 

pool_name 

node_name ip_address port 

node_name ip_address port 

node_name ip_address port 

[/pool] 

[pool] 

pool_name 

node_name ip_address port 

node_name ip_address port 

node_name ip_address port 

[/pool] 
0
for i in string_list: 
    if i.strip() == 'pool_name': 
     print "here" 

будет более вещий способ сделать это.

Или может быть просто

if 'pool_name\n' in string_list: 
    print "here" 
0

Ваши строки заканчиваются '\n', которые вы не проверяла:

for i in range(len(string_list)): 
    print string_list[i] 
    if string_list[i] == 'pool_name\n': 
     print "here" 

Или, strip Строка для удаления '\n', и продолжить в проверке, как вы были:

for i in range(len(string_list)): 
    print string_list[i] 
    if string_list[i].strip() == 'pool_name': 
     print "here" 

Как таковые:

>>> foo() 
[pool] 

pool_name 

here 
node_name ip_address port 

node_name ip_address port 

node_name ip_address port 

[/pool] 

[pool] 

pool_name 

here 
node_name ip_address port 

node_name ip_address port 

node_name ip_address port 

[/pool] 
>>> 
0

Вы должны очистить свой вход с помощью strip() функции

string_list = ['[pool]\n', 'pool_name\n', 'node_name ip_address port\n', 'node_name ip_address port\n', 'node_name ip_address port\n', '[/pool]\n', '[pool]\n', 'pool_name\n', 'node_name ip_address port\n', 'node_name ip_address port\n', 'node_name ip_address port\n', '[/pool]\n'] 

string_list = [i.strip() for i in string_list] 

string_list 
['[pool]', 'pool_name', 'node_name ip_address port', 'node_name ip_address port', 'node_name ip_address port', '[/pool]', '[pool]', 'pool_name', 'node_name ip_address port', 'node_name ip_address port', 'node_name ip_address port', '[/pool]'] 

, то вы можете сделать то, что вы делаете

for i in range(len(string_list)): 
    print string_list[i] 
    if string_list[i] == 'pool_name': 
     print "here" 
Смежные вопросы