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

标签 python list if-statement contains

我遇到这个问题,我想删除包含“非法”字符的列表元素。合法字符在多个列表中指定。它们是这样构成的,其中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/

相关文章:

jquery - 执行 'if statement' 在控制台中给出奇怪的结果

python - 为什么这种模拟退火算法应用于TSP不收敛?

c# - 读取和修改通用 List<T> 中的对象

Python,如何添加另一个装饰器来过滤具有Python属性的现有多重装饰器的输出?

python - 如何找到列表中特定元素的位置?

python - 大数组的 if,else 语句

javascript - If/Then Javascript 显示 HTML 代码

javascript - jQuery if 语句字符计数

python - 如何以某种 pythonic 方式将列表中的所有字符串截断为相同长度?

python - pandas DataFrame 名为 True 和 False 的列工作得很好