将字符串与数组中的所有值进行比较

Nat*_*han 28 python

我试图通过python摸索,并学习做事的最佳方式.我有一个字符串,我正在与另一个字符串进行比较,看看是否有匹配:

if paid[j].find(d)>=0:
    #BLAH BLAH
Run Code Online (Sandbox Code Playgroud)

如果'd'是一个数组,那么查看付费[j]中包含的字符串是否与'd'中的任何值匹配的最有效方法是什么?

Ale*_*lli 45

如果您只想知道是否包含任何项目,您可以说:dpaid[j]

if any(x in paid[j] for x in d): ...
Run Code Online (Sandbox Code Playgroud)

如果您还想知道哪些项目d包含在paid[j]:

contained = [x for x in d if x in paid[j]]
Run Code Online (Sandbox Code Playgroud)

contained如果没有d包含任何项目,将是一个空列表paid[j].

还有其他解决方案,如果您想要的是另一种替代方案,例如,获取包含的第一项(如果没有项目如此包含):dpaid[j]None

firstone = next((x for x in d if x in paid[j]), None)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,因为在评论中你提到了句子和单词,也许你不一定需要字符串检查(这是我所有的例子都在做),因为他们不能考虑单词边界 - 例如,每个例子都会说'cat'是in'混淆'(因为''混淆''包含'cat' 作为子串).为了让在字边界检查,而不是简单的子串支票,你可以高效地使用正则表达式...但我建议你开上一个单独的问题,如果这是你需要什么-所有的代码片段在这个答案,取决于如果您将谓词更改x in paid[j]为更复杂的谓词(例如somere.search(paid[j])适当的RE对象),那么对于您的确切要求,将同样有效somere.(Python 2.6或更高版本 - 2.5及更早版本中的细微差别).

如果你的目的是另外一回事,比如让一个或所有的指标d满足您的约束的项目,因此对于这些不同的问题,太容易的解决办法......但是,如果你真的需要什么,使远离你说的话,我最好不要再猜测,希望你澄清一下;-).


Mar*_*ers 9

我猜你的意思list不是array吗?Python中有一个数组这样的东西,但通常你需要一个列表而不是一个数组.

检查列表是否包含值的方法是使用in:

if paid[j] in d:
    # ...
Run Code Online (Sandbox Code Playgroud)


knu*_*tin 6

在Python中,您可以使用in运算符。您可以执行以下操作:

>>> "c" in "abc"
True
Run Code Online (Sandbox Code Playgroud)

更进一步,您可以检查复杂的结构,例如元组:

>>> (2, 4, 8) in ((1, 2, 3), (2, 4, 8))
True
Run Code Online (Sandbox Code Playgroud)