字符串包含列表的所有元素
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/quizmyfun = 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)
此外,将变量命名为 str
和 list
也不是一个好习惯,因为您以后需要创建 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 将目标元素分配给另一列