Python检查列表项是否包含任何其他列表项

Wer*_*ker 3 python if-statement contains list

我有这个问题,我想删除列表元素,如果它包含'非法'字符.合法字符在多个列表中指定.它们是这样形成的,其中alpha代表字母(az + AZ),digit代表数字(0-9),punct代表标点符号(排序).

alpha = list(string.ascii_letters)
digit = list(string.digits)
punct = list(string.punctuation)
Run Code Online (Sandbox Code Playgroud)

这样我可以将某些内容指定为非法字符,如果它没有出现在其中一个列表中.

之后我有一个包含元素的列表:

Input = ["Amuu2", "Q1BFt", "dUM€n", "o°8o1G", "mgF)`", "ZR°p", "Y9^^M", "W0PD7"]
Run Code Online (Sandbox Code Playgroud)

我想过滤掉包含非法字符的元素.所以这是我想得到的结果(不需要订购):

var = ["Amuu2", "Q1BFt", "mgF)`", "Y9^^M", "W0PD7"]
Run Code Online (Sandbox Code Playgroud)

编辑:

我试过(以及它的所有变体):

for InItem in Input:
    if any(AlItem in InItem for AlItem in alpha+digit+punct):
        FilInput.append(InItem)
Run Code Online (Sandbox Code Playgroud)

其中仅使用过滤后的元素创建新列表,但问题是当包含至少一个合法字符时添加元素.例如:"ZR°p"添加,因为它包含Z,R和a p.

我也尝试过:

for InItem in Input:
    if not any(AlItem in InItem for AlItem in alpha+digit+punct):
Run Code Online (Sandbox Code Playgroud)

但在那之后,我无法弄清楚如何删除元素.哦,还有一点小小的提示,为了让它变得更加困难,如果它有点快,那将会很好,因为它需要做数百万次.但它需要首先工作.

tim*_*geb 5

定义一组合法字符.然后应用列表理解.

>>> allowed = set(string.ascii_letters + string.digits + string.punctuation)
>>> inp = ["Amuu2", "Q1BFt", "dUM€n", "o°8o1G", "mgF)`", "ZR°p", "Y9^^M", "W0PD7"]
>>> [x for x in inp if all(c in allowed for c in x)]
['Amuu2', 'Q1BFt', 'mgF)`', 'Y9^^M', 'W0PD7']
Run Code Online (Sandbox Code Playgroud)