我正在尝试通过python摸索,并学习做事的最佳方式。我有一个字符串,我正在与另一个字符串进行比较,以查看是否匹配:
if paid[j].find(d)>=0:
#BLAH BLAH
如果'd'是一个数组,那么查看付费[j]中包含的字符串是否与'd'中的任何值匹配的最有效方法是什么?
答案 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'}