Python лямбда, отфильтровывая не альфа-символы - PullRequest
1 голос
/ 24 февраля 2011

Я пытаюсь сохранить только буквы в строке. я пытаюсь сделать что-то вроде этого:

s = '1208uds9f8sdf978qh39h9i#H(&#*H(&H97dgh'
s_ = lambda: letter if letter.isalpha(), s

это ошибки. как будет выглядеть рабочая версия?

Ответы [ 7 ]

4 голосов
/ 24 февраля 2011

С другой стороны:

s_ = filter(lambda c: c.isalpha(), s)
4 голосов
/ 24 февраля 2011

как насчет

re.sub('[^a-zA-Z]','', s)

или

"".join([x for x in s if x.isalpha()])
3 голосов
/ 24 февраля 2011

Один удобный способ манипулировать строками - использовать функцию генератора и метод join:

result = "".join( letter for letter in s if letter.isalpha() )
2 голосов
/ 24 февраля 2011

Вам не нужна лямбда-функция:

result = ''.join(c for c in input_str if c.isalpha())

Если вы действительно хотите использовать лямбда-функцию, вы можете написать ее следующим образом:

result = ''.join(filter(lambda c:str.isalpha(c), input_str))

Но это также можно упростить до:

result = ''.join(filter(str.isalpha, input_str))
1 голос
/ 24 февраля 2011

Вы, вероятно, хотите понять список здесь:

s_ = [letter for letter in s if letter.isalpha()]

Однако, это даст вам список строк (каждая длиной в один символ).Чтобы преобразовать это в одну строку, вы можете использовать join:

s2 = ''.join(s_)

Если вы хотите, вы можете объединить два в один оператор:

s_ = ''.join(letter for letter in s if letter.isalpha())

Если вы особенноЕсли вы хотите или должны использовать лямбда-функцию, вы можете использовать filter вместо генератора:

my_func = lambda letter: letter.isalpha()
s_ = ''.join(filter(my_func, s))
0 голосов
/ 24 февраля 2011

Это довольно длинный путь, но он позволит вам создать фильтр для любого произвольного набора символов.

import string

def strfilter(validChars):
    vc = set(validChars)
    def filter(s):
        return ''.join(ch for ch in s if ch in vc)
    return filter

filterAlpha = strfilter(string.letters)
filterAlpha('1208uds9f8sdf978qh39h9i#H(&#*H(&H97dgh')  # -> 'udsfsdfqhhiHHHdgh'
0 голосов
/ 24 февраля 2011
>>> s = '1208uds9f8sdf978qh39h9i#H(&#*H(&H97dgh'
>>> ''.join(e for e in s if e.isalpha())
'udsfsdfqhhiHHHdgh'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...