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

时间:2010-05-06 19:49:12

标签: python

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

if paid[j].find(d)>=0:
    #BLAH BLAH

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

4 个答案:

答案 0 :(得分:43)

如果您只想知道d中是否包含<{em> paid[j]的任何项,您的字面意思是:

if any(x in paid[j] for x in d): ...

如果您还想了解 d中包含paid[j]项目:

contained = [x for x in d if x in paid[j]]
如果contained中未包含d项,则

paid[j]将为空列表。

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

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

如果你的意图又是另一回事,比如在满足你约束的项目d中获得一个或所有索引,那么对于那些不同的问题也有简单的解决方案。 ......但是,如果你实际需要的东西离你说的那么远,我最好不要再猜测了,希望你澄清一下; - )。

答案 1 :(得分:8)

我认为你的意思是list而不是array?在Python中有一个数组,但通常你需要一个列表而不是一个数组。

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

if paid[j] in d:
    # ...

答案 2 :(得分:4)

在Python中,您可以使用in运算符。你可以做这样的事情:

>>> "c" in "abc"
True

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

>>> (2, 4, 8) in ((1, 2, 3), (2, 4, 8))
True

答案 3 :(得分:1)

for word in d:
    if d in paid[j]:
         do_something()

将尝试列表d中的所有字词,并检查它们是否可以在字符串paid[j]中找到。

由于paid[j]必须再次扫描d中的每个字,因此效率不高。您还可以使用两个集合,一个由句子中的单词组成,一个列表,然后查看集合的交集。

sentence = "words don't come easy"
d = ["come", "together", "easy", "does", "it"]

s1 = set(sentence.split())
s2 = set(d)

print (s1.intersection(s2))

输出:

{'come', 'easy'}