Python 如果在值中未找到特定的迭代子字符串*,如何返回值?

Python 如果在值中未找到特定的迭代子字符串*,如何返回值?,python,Python,我有一个包含文本文件的排除子字符串,我希望迭代该文本文件以检查并返回没有排除子字符串的输入项 在这里,我使用Python2.4,下面的代码就是为了实现这一点,因为带有open的和任何都不起作用。但我必须硬编码子字符串: 工作代码: def filterJunk(x): return [i for i in x if not ('I' in i or 'am' in i or '#junk' in i)] OutPutList = [] for x in Inputstrings

我有一个包含文本文件的排除子字符串,我希望迭代该文本文件以检查并返回没有排除子字符串的输入项

在这里,我使用Python2.4,下面的代码就是为了实现这一点,因为带有open的
任何
都不起作用。但我必须硬编码子字符串:

工作代码:

def filterJunk(x):
        return [i for i in x if not ('I' in i or 'am' in i or '#junk' in i)]

OutPutList = []
for x in InputstringsList:
    OutPutList.append(filterJunk(x))
问题:

def filterJunk(x):
        return [i for i in x if not ('I' in i or 'am' in i or '#junk' in i)]

OutPutList = []
for x in InputstringsList:
    OutPutList.append(filterJunk(x))

但是如果我需要排除n个子字符串呢?显然,我不会在代码中硬编码它们,因此我需要一种替代方法,以便可以从排除文件中读取每个子字符串,并断言最终值不包含相同的子字符串

如果在value中找不到文本文件中的子字符串,则可以返回值

例如

处理:

InputstringsList = ["Icantbeapart_of_yourlist_asI_am_in_Junk", "youAre", "MeeToooo", "#junk"]
预期产出

OutPutList = ["youAre", "MeeToooo"]

您可以使用助手函数和内置函数执行此操作:

def filterJunk(x, excluded):
    def not_excluded(s):
        for ex in excluded:
            if ex in s:
                return False
        return True

    return filter(not_excluded, x)

stringsList = ["Icantbeapart_of_yourlist_asI_am_in_Junk", "youAre", "MeeToooo", "#junk"]
excluded = 'I', 'am', '#junk'

print filterJunk(stringsList, excluded)  # -> ['youAre', 'MeeToooo']
分析

因为我的答案远远不止一行代码,所以您有理由认为它比“一行”要慢,比如中的两行。这是否正确取决于您使用的Python版本。这可以从基准测试不同的算法中看出,我刚才使用了一些执行定时测试代码(I)

对于Python 2.7.14,结果是:

使用Python 2.7.14实现从最快到最慢的执行速度
(10000次执行,最好3次重复)
AGN凝视者1:0.009705秒,相对速度1.00倍,速度慢0.00%
马提诺:0.012495秒,相对速度1.29倍,减速28.74%
AGN凝视者2:0.045498秒,相对速度4.69倍,速度慢368.79%
但对于Python 3.6.3来说,它们是完全不同的:

使用Python 3.6.3时执行速度从最快到最慢 (10000次执行,最好3次重复) 马提诺:0.003329秒,相对速度1.00x,慢0.00% AGN天文望远镜1:0.017841秒,相对速度5.36倍,速度慢435.99% AGN凝视者2:0.034160秒,相对速度10.26倍,慢926.29%
一行程序(虽然不是最理想的选择):


你能更清楚一点这个函数的输入和输出是什么样子的吗?你的问题是什么?如果我需要排除n个子字符串怎么办?显然,我不会在代码中对它们进行硬编码,因此我需要一种替代方法,以便我可以从排除文件中读取每个子字符串,并断言最终值不包含相同的值。请显示包含文件输入的代码。.刚刚更新了完整逻辑的代码我被限制使用PRD安装的python 2.4.x,如我所述:“任何“不起作用。@RahulTrivedi只是删除
任何
-这里不需要它。请1)回答正确,2)在我的测试中比我的一行程序更有效。@AGN Gazer:你很有运动精神,谢谢,但事情并不是那么简单。请参阅我刚才添加到答案中的分析部分。我想说,我们的答案中哪一个是“最好的”取决于它的使用环境。OP的问题没有标记为python-2.x,但在其中他们提到他们使用的是古老的python 2.4。实际上,我甚至无法在2.4中测试任何东西(我没有它,也不想麻烦安装它),您的答案非常好。无论如何,我不能收回我的赞成票:)@AGN Gazer:我也不会安装非常旧的Python v2.4来测试我们对这个问题的答案。然而,我在更新中发布了一个指向我的基准代码的链接,这样OP可以看到他们希望的最好的答案(甚至可能更改他们接受的答案)
from itertools import dropwhile
[x for x in stringsList if not list(dropwhile(lambda t: t not in x, excluded))]