Python For loop return Tupleis有更好的方法来实现这一点

2024-10-02 10:25:40 发布

您现在位置:Python中文网/ 问答频道 /正文

测试目标字符串中的键字符串是否完全匹配。输出必须是匹配的起始点的元组。我的代码可以工作,但我觉得它可以整洁得多。我怎样才能在不从附加列表转换的情况下返回元组?到处找,似乎找不到答案。谢谢!!在

from string import *


target1 = 'atgacatgcacaagtatgcat'
target2 = 'atgaatgcatggatgtaaatgcag'

key10 = 'a'
key11 = 'atg'
key12 = 'atgc'
key13 = 'atgca'

def subStringMatchExact(target, key):
    match_list = []
    location = 0

    for i in target:
        ans = find(target, key, location)
        if ans >= 0:
            match_list.append(ans)
            location = ans + (len(key))

    print tuple(match_list)

subStringMatchExact(target1, key11)

Tags: key字符串代码target目标列表match情况
3条回答
def subStringMatchExact(target, key):
    i = target.find(key)
    while i != -1:
        yield i
        i = target.find(key, i + len(key))

print tuple(subStringMatchExact(target1, key11))

顺便说一句,不要使用target1key11使用targetskeys列表。在

还有另一种方法:

def find_sublist(l, sublist):
    for i in xrange(len(l)-len(sublist)+1):
        if sublist == l[i:i+len(sublist)]:
            yield i

然后您可以执行以下操作来获取元组:

^{pr2}$

这是正则表达式的完美工作。在

import re
def subStringMatchExact(target, key):
    regex = re.compile(re.escape(key))
    return tuple(match.start() for match in regex.finditer(target))

请注意,这只查找不重叠的匹配项。如果您还想查找重叠的匹配项:

^{pr2}$

当然,除非您实际需要结果是元组,否则您只需从最后一行删除tuple,并让您的函数返回一个更高效的生成器。在

相关问题 更多 >

    热门问题