我试图检查字符串targets中是否有任何一个以给定的prefixes中的任何一个开头,例如:

prefixes = ["a", "b", "c"]
targets = ["abar", "xbar"]

然后检查targets的任何元素是否具有prefixes中的前缀(并查找targets的元素及其匹配的第一个前缀)。这里"abar"是唯一适合的元素。我自己的版本是:
for t in target:
  if any(map(lambda x: t.startswith(x), prefixes)):
    print t

有没有更好/更短/更快的方法使用普通的python或numpy?

最佳答案

如果你想要所有的匹配,只需使用这个列表理解:

>>> from itertools import product
>>> matches = [(t,p) for t,p in product(targets,prefixes) if t.startswith(p)]
>>> print(matches)
[('abar', 'a'), ('cbar', 'c')]

如果您只想要第一个,请将next与列表理解一起用作生成器表达式。如果您只想确定是否存在任何匹配,这将短路。
>>> nextmatch = next(((t,p) for t,p in product(targets,prefixes) if t.startswith(p)), None)
>>> print(nextmatch)
[('abar', 'a')]

09-20 19:37