Python只保留列表中的字母数字字

时间:2018-05-07 13:13:19

标签: python list

我有一个类似于以下内容的词汇列表

>>>x = np.arange(9.).reshape(3, 3)
>>>x
array([[ 0.,  1.,  2.],
   [ 3.,  4.,  5.],
   [ 6.,  7.,  8.]])
>>>np.where( x > 5 )
(array([2, 2, 2]), array([0, 1, 2])) 

我想提取所有非字母数字字符以得到如下结果:

    mylist=["hi", "h_ello", "how're", "you", "@list"]

请注意我在现实生活中有一个更长的列表,它包含一些非字母数字实例,如〜,?,>,=,+等。

有谁知道怎么做,拜托? 谢谢

4 个答案:

答案 0 :(得分:2)

使用str.isalpha()

<强>实施例

mylist=["hi", "h_ello", "how're", "you", "@list"]
print([i for i in mylist if not i.isalpha()])

<强>输出:

['h_ello', "how're", '@list']

答案 1 :(得分:1)

您可以将list comprehensionisalnum()功能结合使用。

mylist=["hi", "h_ello", "how're", "you", "@list"]
print([i for i in mylist if not i.isalnum()])

输出

['h_ello', "how're", '@list']

来自python documentation

  

str.isalnum()   如果字符串中的所有字符都是,则返回true   字母数字,至少有一个字符,否则为false。一个   如果下面的一个返回True,则字符c是字母数字:   c.isalpha()c.isdecimal()c.isdigit()c.isnumeric()

答案 2 :(得分:0)

您还可以将filterre

一起使用
import re
mylist=["hi", "h_ello", "how're", "you", "@list"]
new_list = list(filter(lambda x:re.findall('[\W_]', x), mylist))

输出:

['h_ello', "how're", '@list']

答案 3 :(得分:0)

最好你去isalnum或正则表达式,在这里我尝试了一个不同的方法只是为了好玩,这不是生产代码,它需要时间,我只是试图向你展示一个不同的方式:

import unicodedata
import sys

mylist = ["hi", "h_ello", "how're", "you", "@list"]


def translate(text_):
    pun=[i for i in range(sys.maxunicode) if unicodedata.category(chr(i)).startswith('P')]

    if True in [True if ord(i) in pun else False for i in text_ ]:
        return text_


print(list(filter(lambda x:x,[translate(i) for i in mylist])))

输出:

['h_ello', "how're", '@list']