簡體   English   中英

python lambda,過濾掉非字母字符

[英]python lambda, filtering out non alpha characters

我正在嘗試僅將字母保留在字符串中。 我正在嘗試做這樣的事情:

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

這個錯誤出來了。 工作版本的外觀如何?

怎么樣

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

要么

"".join([x for x in s if x.isalpha()])

交替:

s_ = filter(lambda c: c.isalpha(), s)

一種方便的操作字符串的方法是使用生成器函數和join方法:

result = "".join( letter for letter in s if letter.isalpha() )

您不需要lambda函數:

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

如果您確實想使用lambda函數,則可以如下編寫:

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

但這也可以簡化為:

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

您可能需要在此處進行列表理解:

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

但是,這將為您提供一個字符串列表(每個字符長)。 要將其轉換為單個字符串,可以使用join

s2 = ''.join(s_)

如果需要,可以將兩者合並為一個語句:

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

如果您特別想要或需要使用lambda函數,則可以使用filter代替生成器:

my_func = lambda letter: letter.isalpha()
s_ = ''.join(filter(my_func, s))
>>> s = '1208uds9f8sdf978qh39h9i#H(&#*H(&H97dgh'
>>> ''.join(e for e in s if e.isalpha())
'udsfsdfqhhiHHHdgh'

這是很長的路要走,但可以讓您為任意字符集創建一個過濾器。

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM