我试图通过python摸索,并学习最好的方式来做事情。我有一个字符串,其中我做可以用一个字符串比较,看看是否有匹配:比较字符串与数组中的所有值
if paid[j].find(d)>=0:
#BLAH BLAH
如果“d”是一个数组,什么是看是否支付包含在字符串中的最有效的方法[j]与'd'中的任何值匹配?
我试图通过python摸索,并学习最好的方式来做事情。我有一个字符串,其中我做可以用一个字符串比较,看看是否有匹配:比较字符串与数组中的所有值
if paid[j].find(d)>=0:
#BLAH BLAH
如果“d”是一个数组,什么是看是否支付包含在字符串中的最有效的方法[j]与'd'中的任何值匹配?
如果你只是想知道,如果的d
任何项目包含在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]
空列表。
还有其他的解决方案,但如果你想要的是另一种选择,例如,获得包含在paid[j]
的d
的第一项目(和None
如果项目不被这样包含):
firstone = next((x for x in d if x in paid[j]), None)
BTW ,因为在评论中你提到了句子和单词,也许你不一定需要字符串检查(这就是我所有的例子所做的),因为它们不能考虑单词边界 - 例如,每个例子都会说'cat'是in
'obfuscate'(因为'混淆'包含'cat'作为子字符串)。为了允许对单词边界进行检查,而不是简单的子字符串检查,您可能会高效地使用正则表达式......但是我建议您打开一个单独的问题,如果这是您需要的 - 此答案中的所有代码片断取决于根据您的具体要求,如果您将谓词x in paid[j]
更改为更复杂的谓词(如somere.search(paid[j])
),则适用于适当的RE对象somere
将同样有效。 (Python 2.6或更高版本 - 2.5和更早版本中的细微差异)。
如果你的目的是另外一回事,比如让一个或所有指数在项目d
满足您的约束的,因此对于这些不同的问题,太容易的解决办法......但是,如果你实际上要求离你说的很远,我最好不要猜测,并希望你澄清;-)。
这是一个很好的解释,谢谢。我的目标是解析所有这些HTML代码寻找链接。一旦我列出了他们的名单,我会通过该名单并将其与主名单'd'进行比较。我想比较字符串匹配的原因是我可能在解析的html中找到链接到domain.com,但它不匹配'd'中的任何内容,但我希望它匹配www.domain.com 。 从你的解释,这将完成我想要的,对吧? 如果有的话(x在付费[j]为x在d):... – Nathan 2010-05-06 20:56:52
@哈利克,是的,只要你还想找到(例如)notreallywww.domain.com和www.domain.com .fooledya.org'。如果你不想要这样的虚假匹配,你需要一个比纯字符串匹配更复杂的方法。但是,如果有的话... ...部分仍然是正确的,只是带有不同的谓词(尽管如此,更好地打开一个单独的问题) – 2010-05-06 22:23:31
谢谢!刚刚打开关于此主题的新问题 – Nathan 2010-05-07 01:57:24
我假设你的意思是list
而不是array
? Python中有这样一个数组,但更多的时候是想要一个列表而不是一个数组。
的方式来检查,如果列表中包含的值是使用in
:
if paid[j] in d:
# ...
在Python中你可以使用in
操作。你可以做这样的东西:
>>> "c" in "abc"
True
采取这种进一步的,你可以检查复杂的结构,像元组:
>>> (2, 4, 8) in ((1, 2, 3), (2, 4, 8))
True
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'}
你能解释一下'd''中任何值的匹配是什么意思吗?你认为什么是“匹配”?你需要的字符串是相同的吗? – 2010-05-06 20:04:32
感谢您的回复。是的,我是指名单。对不起,还在学习。我的意思是看付费[j](一个句子)和列表'd'中的任何单词之间是否存在模式匹配。 – Nathan 2010-05-06 20:15:18