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)
但在那之后,我无法弄清楚如何删除元素.哦,还有一点小小的提示,为了让它变得更加困难,如果它有点快,那将会很好,因为它需要做数百万次.但它需要首先工作.
定义一组合法字符.然后应用列表理解.
>>> 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)