字符串包含列表的所有元素

Posted

技术标签:

【中文标题】字符串包含列表的所有元素【英文标题】:String contains all the elements of a list 【发布时间】:2012-10-11 14:00:51 【问题描述】:

我正在转向 Python,但对 Python 方法还是比较陌生。我想编写一个函数,它接受一个字符串和一个列表,如果列表中的所有元素都出现在字符串中,则返回 true。


这看起来相当简单。但是,我面临一些困难。代码是这样的:


def myfun(str,list):
   for a in list:
      if not a in str:
         return False
      return True

Example : myfun('tomato',['t','o','m','a']) should return true
          myfun('potato',['t','o','m','a']) should return false
          myfun('tomato',['t','o','m']) should return true

另外,我希望有人可以在这里提出一种可能的正则表达式方法。我也在尝试它们。

【问题讨论】:

那么你可能会选择一个需要正则表达式的更好的问题。这没有。事实上你做得很好。 如果您想变得更好并尝试与正则表达式相关的任务,请尝试regex101.com/quiz myfun = lambda a, b: all(i in a for i in b) 【参考方案1】:
>>> all(x in 'tomato' for x in ['t','o','m','a'])
True
>>> all(x in 'potato' for x in ['t','o','m','a'])
False

【讨论】:

如果想遍历字符串中的字符,看看是否都在列表中? 然后使用列表推导。 您能否提供一个演示,说明我如何使用它?在这两者之间,我一定会去看看!!【参考方案2】:
def myfun(str,list):
   for a in list:
      if not a in str:
         return False
   return True

return true 必须在 for 循环之外,而不是在 if 语句之后,否则它会在检查完第一个字母之后才返回 true。这解决了您的代码的问题:)

【讨论】:

谢谢.. 我现在明白了。在这两者之间,至少对于刚接触该语言的人来说,这些缩进有点令人困惑!【参考方案3】:

对于您浏览列表的每个字母。因此,如果列表的长度为n 并且您有m 字母,那么复杂度为O(n*m)。如果你预处理这个词,你可能会达到O(m)

def myfun(word,L):
    word_letters = set(word) #This makes the lookup `O(1)` instead of `O(n)`
    return all(letter in word_letters for letter in L)

此外,将变量命名为 strlist 也不是一个好习惯,因为您以后需要创建 list 或使用 str,它们将被您的变量遮蔽。

一些相关信息:

all函数

set complexity

【讨论】:

【参考方案4】:

如果您不担心重复字符,那么:

def myfunc(string, seq):
    return set(seq).issubset(string)

而且,未经测试,如果您确实关心重复字符,那么也许(未经测试):

from collections import Counter
def myfunc(string, seq):
    c1 = Counter(string)
    c2 = Counter(seq)
    return not (c2 - c1)

【讨论】:

string 是 Python 模块的名称,因此命名变量 string 并不是一个好主意【参考方案5】:

为了好玩,我想我会用迭代器和地图来做:

from operator import contains
from itertools import imap, repeat

def myfun(str, list):
    return all(imap(contains, repeat(str), list))

然后我意识到这与接受的答案基本相同,但可能需要更多的方法调用。

def myfun(str, list):
    return all(letter in str for letter in list)

【讨论】:

以上是关于字符串包含列表的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

从包含特定字符的列表中删除元素[重复]

如何检查字符串是不是包含列表的任何元素并获取元素的值?

如何测试字符串包含列表中的元素并通过 Pandas 将目标元素分配给另一列

在 Python 中,如何从列表中删除包含某些类型字符的任何元素?

python练习6——PTA

删除包含某些字符的数组列表中的所有字符串