【问题标题】:python: return False if there is not an element in a list starting with 'p='python:如果列表中没有以'p ='开头的元素,则返回False
【发布时间】:2026-01-30 18:40:01
【问题描述】:

有一个类似的列表

lst = ['hello', 'stack', 'overflow', 'friends']

我该怎么做:

if there is not an element in lst starting with 'p=' return False else return True

?

我在想这样的事情:

for i in lst:
   if i.startswith('p=')
       return True

但我不能在循环内添加 return False,否则它会在第一个元素处消失。

【问题讨论】:

  • @ScottHunter 确定
  • 既然你只知道它是False,一旦你测试了所有元素,你应该在循环结束后返回False
  • 然后将return False 放在 循环之外,或者放在else 块中。你不能确定没有,直到最后。或者只使用return any(...)

标签: python list loops any


【解决方案1】:

好吧,让我们分两部分来做:

首先,您可以创建一个新列表,其中每个元素都是一个仅包含每个原始项目的前 3 个字符的字符串。您可以使用map() 这样做:

newlist = list(map(lambda x: x[:2], lst))

然后,您只需要检查"p=" 是否是这些元素之一。那将是: "p=" 在新列表中

将以上两者结合在一个函数中并使用一条语句应如下所示:

def any_elem_starts_with_p_equals(lst):
    return 'p=' in list(map(lambda x: x[:2], lst))

【讨论】:

  • return 'p=' in list(map(lambda x: x[:2], lst)) 这不是有效的 Python 语法。除非你把它放在一个函数中
  • @GarbageCollector 我认为OP真的意味着代码在一个函数中,从措辞和发布的示例来看
  • 是的,我想是的。如果您在答案中编写完整的函数以避免任何歧义,那会更好。
【解决方案2】:

这将测试lst 的每个元素是否满足您的条件,然后计算这些结果的or

any(x.startswith("p=") for x in lst)

【讨论】:

  • 为什么any 中的列表理解而不是生成器理解any(x.startswith("p=") for x in lst)
  • 我删除了列表理解。你在浪费内存和测试。使用生成器表达式any() 可以使循环短路;当第一个元素通过测试时,就不需要再测试后面的所有内容了。
【解决方案3】:

试试这个

if len([e for e in lst if e.startwith("p=")])==0: return False

【讨论】:

    【解决方案4】:

    使用any条件检查列表中所有条件相同的元素:

    lst = ['hello','p=15' ,'stack', 'overflow', 'friends']
    return any(l.startswith("p=") for l in lst)
    

    【讨论】:

      【解决方案5】:

      我建议使用迭代器,例如

      output = next((True for x in lst if x.startswith('p=')),False)
      

      这将为以'p=' 开头的第一个 lst 元素输出True,然后停止搜索。如果到达末尾没有找到'p=',则返回False

      【讨论】:

        【解决方案6】:

        您可以使用内置方法any 来检查列表中以p= 开头的任何元素。使用字符串的startswith 方法检查字符串的开头

        >>> lst = ['hello', 'stack', 'overflow', 'friends']
        >>> any(map(lambda x: x.startswith('p='),lst))
        >>> False
        

        一个应该导致True的例子

        >>> lst = ['hello', 'p=stack', 'overflow', 'friends']
        >>> any(map(lambda x: x.startswith('p='),lst))
        >>> True
        

        【讨论】:

          最近更新 更多