2015-11-11 2 views
0

Дано:Python сравнение строк не удается, но если принимает

if parse_rec[i] != col_data: 
    parse_rec[i] = col_data 
    data_changed = True 
    print str(i) 
    print str(parse_rec[i]) 
    print str(col_data) 
    print type(parse_rec[i]) 
    print type(col_data) 
    print len(parse_rec[i]) 
    print len(col_data) 
    print parse_rec[i] != col_data 

я получаю:

10 
1037864 
1037864 
<type 'str'> 
<type 'str'> 
7 
7 
False 

Если я изменяю тест:

if str(parse_rec[i]) != str(col_data): 

Он работает, как ожидалось, и ' если условие не работает (они равны) и ничего не печатает. Что делает str()? Зачем мне это нужно? Могу ли я не доверять сопоставлениям строк в Python?

Я проверил его. В моем файле нет вкладок.

+3

* «Могу ли я не доверяю любые сравнения строк в Python?» * - это звучит как проблема в том, что ** вы не выполняли строковые сравнения **. Вы, конечно, не можете ожидать, например. '1 == '1'', Python строго типизирован. – jonrsharpe

+0

Мог делиться содержимым 'parse_rec'? – shanmuga

+4

Во-первых, ваши 'print' были бы более полезными, если вы покажете нам, что 'parse_rec [i]' is * before * вы назначили его 'col_data'. На самом деле, держу пари, если вы делаете все эти отпечатки * перед * назначением, вы можете увидеть ответ. Во-вторых, нет смысла спрашивать, не завершились ли сравнения строк, когда ваш пример показывает, что * some * сравнение терпит неудачу, но сравнение строк не делает. – dwanderson

ответ

1

Это произойдет, если, например, parse_rec[i] первоначально содержал номер 10, а col_data содержал строку '10'. str преобразует любой объект Python в строковое представление; преобразование обоих из них (с одним уже являющимся строкой) сделает их равными.

-1

Ваши две данные являются строками и могут быть безопасно сопоставлены с оператором ==.

Что str() делает:

Возвращает строку, содержащую славно для печати представление объекта. Для строк это возвращает строку.

Если у вас целое число и строку, str() становится необходимым:

print 123 == '123' # false 
print 123 is '123' # false 
print str(123) == '123' # true 
print '123' == '123' # true 
print '123' is '123' # false