如何在python中检查列表中包含的项

如何在python中检查列表中包含的项,python,string,list,special-characters,Python,String,List,Special Characters,我有两张名单 my_list = ['on@3','one',"$", "lo#"] spl = ["@","$"] 我正在尝试获取“我的列表”中的项目,其中包含spl中的任何项目 我试过了 out_list = [item for item in my_list if item.contains("!".join(spl))] 但这是错误的 我的预期产出是 out_list = ["on@3","$"] 没有类似于项的方法。包含。有项。\uuu包含\uuu,但您不需要直接调用它 要检查项

我有两张名单

my_list = ['on@3','one',"$", "lo#"]
spl = ["@","$"]
我正在尝试获取“我的列表”中的项目,其中包含spl中的任何项目

我试过了

out_list = [item for item in my_list if item.contains("!".join(spl))]
但这是错误的

我的预期产出是

out_list = ["on@3","$"]

没有类似于
项的方法。包含
。有
项。\uuu包含\uuu
,但您不需要直接调用它

要检查项目中是否包含
spl
中的任何项目,请使用内置
any

lst = [item for item in my_list if any(x in item for x in spl)]
# ...                           if any(item.__contains__(x) for x in spl)]
print(lst)
# ['on@3', '$']
以及更具可读性的形式:

result = []

for item in my_list:
    for s in spl:
        if s in item:
            result.append(item)

嵌套循环不正确。如果一个项目包含这些字符中的一个以上,它将被复制。尝试使用
my_list=['on@3$'、'one'、“$”、“lo#”]
好的,我会尝试使用您提到的值,但是这个解决方案花费的时间更少是的,我两次得到相同的值,我想在得到这个解决方案的结果后应用
list(set(result))
,因为这仍然需要更少的时间,您怎么说@MosesKoledoye@CHANDRAMURUGAN一旦调用列表上的
set
,列表的初始顺序就会丢失。从列表到集合,再从集合到列表的往返过程是不必要的,当数据集增加时,会减慢代码的速度。最后,如果您的列表中包含不可损坏的项目,
设置(结果)
将不起作用。是的,我知道,但
%timeit out\u列表=[我的\u列表中的项目如果有(spl中的项目对应x)]最好3:3.26µs/循环
%timeit结果=[我的\u列表中的项目对应spl中的项目,如果s在项目中]每个循环3:920纳秒的最佳值
+
时间列表(设置(结果))每个循环3:585纳秒
仍然小于3.26微秒
result = []

for item in my_list:
    for s in spl:
        if s in item:
            result.append(item)