检索字符串中存在的子字符串的位置

时间:2017-09-04 03:40:11

标签: python string list indexing

我试图将这个字母的位置放在一个单词中,该单词位于列表中。

在代码中,k是一个列表,其中包含"ATCGCATCG"的3个部分,"ATC", "GCA" and "TCG".我想要的是,每个部分都要检索第一部分和最后的位置。在此,ATC应该有1 and 3,因为A是第一个,C是第三个。因此,对于GCA,它应为46,,依此类推。

所以,输出应该如下所示:

PART1    ATC  1 3 
PART2    GCA  4 6
PART3    TCG  7 9

然而,我能得到的是:

PART1    ATC  0 0 
PART2    GCA  1 2
PART3    TCG  2 4

产生此输出的代码是:

def separate(string,n):
    k = [string[i:i+n] for i in range(0, len(string),n)]
    yield k
    i=1
    for element in k:
                    print 'PART' + str(i) + '\t' + element + '\t' + str(int(k.index(element))) + str(int((k.index(element)) + int(k.index(element)))) 
                    i=i+1


for it in list((separate("ATCGCATCG", n =3))):
        print it

如果你能给我一个选择,我将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:2)

IIUC,我认为你过于复杂。只需在循环中构建字符串并生成。

def foo(string, n):
    c = 1
    for i in range(0, len(string), n):
        yield '\t'.join(['PART{}'.format(c), string[i : i + n], str(i + 1), str(i + n)])
        c += 1

for i in foo("ATCGCATCG", 3):
     print(i)

PART1   ATC 1   3
PART2   GCA 4   6
PART3   TCG 7   9

答案 1 :(得分:1)

def separate(string,n):
    k = [string[i:i+n] for i in range(0, len(string),n)]
    current = string
    start = 0
    end = 0
    for i, element in enumerate(k):
        start = end + current.index(element) + 1
        end = start + len(element) - 1
        current = string[end:]
        print("PART{i}\t{el}\t{s} {e}".format(i=i, el=element, s=start, e=end))

separate("ATCGCATCG", n=3)

输出:

PART0   ATC 1 3
PART1   GCA 4 6
PART2   TCG 7 9

答案 2 :(得分:1)

由于每个部分的字符串都有固定的长度,我想你可以试试这个:

def separate(string,n):
    k = [string[i:i+n] for i in range(0, len(string),n)]
    yield k
    for curr_index in range(len(k)):
        element = k[curr_index]
        curr = curr_index * n + 1
        print ('PART' + str(curr_index + 1) + '\t' + element + '\t' + str(curr) + str(curr + n - 1))

for it in list((separate("ATCGCATCG", n =3))):
        print (it)

它采用当前在for循环中迭代的元素的curr_index,并使用它来计算原始文本中字符串的位置。希望这有帮助