我试图检查字符串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')]