2013-02-25 2 views
0

Вот код PythonНевозможно отфильтровать в питона с помощью лямбда

languages = ["HTML", "JavaScript", "Python", "Ruby"] 
print filter(lambda x: x == "Python",languages) 

Выход:

[u'Python'] 

Где делает u пришли и как избежать этого.

Требуемая мощность:

['Python'] 

Update ::

Я пытался это на код academy.I догадок дере была ошибка в их программном обеспечении.

+0

Это, безусловно, происходит от всего, что вы здесь показали. Ваш примерный код дает '['Python']'. – delnan

+0

'u' означает, что выход представляет собой строку в Юникоде. Почему вы хотите избежать этого? – BrenBarn

+3

Обратите внимание, что при использовании 'filter()' с 'lambda' вам будет лучше [понимание списка] (http://www.youtube.com/watch?v=pShL9DCSIUw). Например: '[x для x в языках, если x ==" Python "]'. –

ответ

1

Ваши данные содержат unicode текст, а не str текст. u'' обозначает буква unicode.

Это, вероятно, нормально, и полностью зависит от того, где вы получили свой languages список от. В остальном .

Упражнение CodeAcademy, на которое вы ссылаетесь, фактически broken. Он показывает вам вход Python str, но он использует unicode. Вы должны сообщить об этом как об ошибке.

Вы можете обойти эту ошибку, отображая все к str:

print filter(lambda x: x=='Python', map(str, languages)) 

или путем отображения вывода из filter в str():

print map(str, filter(lambda x: x=='Python', languages)) 

, который работает для этом случае потому что на входе используются только символы ASCII. Обычно вы кодируете unicode в str явно, указав вместо этого кодировку, см. Python Unicode HOWTO.

+0

Могу ли я напечатать вывод как ['Python'] – iJade

+0

@iBlue Почему вы хотите это сделать? Если вы хотите отобразить список элементов, тогда сделайте что-то вроде '', ".join()', чтобы получить текстовое представление, которое вам нужно, не используйте представление Python. Если вы хотите, чтобы представление, как видит Python, это то, что подходит. Когда вы используете строки unicode из списка, они будут нормально функционировать, это только их представление, которое отличается. –

+0

@iBlue: Зачем вам нужно? –

-1

u означает Юникода, вы можете преобразовать его в нормальную строку с str(filter(...))

+0

-1, это плохая идея, текст в Unicode должен (на самом деле, лучше), в 99,9% случаев. –

+1

@ Lattyware он спросил ... я не сказал, что это хорошо или плохо, это зависит от него, чтобы решить, хочет ли он это – yurib

+0

Вы говорите «вы можете удалить его», что заставляет его казаться чем-то простым и не объясняет минусы для этого. Не говоря уже о том, что искатель не всегда знает, чего они хотят. –

0

Непосредственные преобразования производится с:

languages = ["HTML", "JavaScript", "Python", "Ruby"] 
flt = filter(lambda x: x == "Python",languages) 
print [str(X) for X in flt] 

Выход

['Python'] 

Да, простой str() является делая изменение.

+1

Опять же, это не говорит о потенциальных проблемах с выполнением этого преобразования и совершенно ненужно 99,9% времени. –

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