我遇到这个问题,我想删除包含“非法”字符的列表元素。合法字符在多个列表中指定。它们是这样构成的,其中alpha
代表字母表(a-z + A-Z),digit
代表数字(0-9),punct
代表标点符号(有点)。
alpha = list(string.ascii_letters)
digit = list(string.digits)
punct = list(string.punctuation)
这样我就可以将未出现在这些列表之一中的某些内容指定为非法字符。
之后我有一个包含元素的列表:
Input = ["Amuu2", "Q1BFt", "dUM€n", "o°8o1G", "mgF)`", "ZR°p", "Y9^^M", "W0PD7"]
我想过滤掉包含非法字符的元素。所以这是我想要得到的结果(不需要排序):
var = ["Amuu2", "Q1BFt", "mgF)`", "Y9^^M", "W0PD7"]
编辑:
我已经尝试过(及其所有变体):
for InItem in Input:
if any(AlItem in InItem for AlItem in alpha+digit+punct):
FilInput.append(InItem)
创建的新列表仅包含过滤后的元素,但这里的问题是,当元素至少包含一个合法字符时,元素就会被添加。例如:添加了 "ZR°p"
,因为它包含 Z、R 和 p。
我也试过:
for InItem in Input:
if not any(AlItem in InItem for AlItem in alpha+digit+punct):
但在那之后,我不知道如何删除该元素。 哦,还有一个小技巧,为了让它变得更加困难,如果速度快一点就好了,因为它需要完成数百万次。但它需要先工作。
最佳答案
定义一组合法字符。然后应用列表理解。
>>> 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']
关于Python 检查列表项是否(不)包含任何其他列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350567/