如何在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)