我试图将这个字母的位置放在一个单词中,该单词位于列表中。
在代码中,k
是一个列表,其中包含"ATCGCATCG"
的3个部分,"ATC", "GCA" and "TCG".
我想要的是,每个部分都要检索第一部分和最后的位置。在此,ATC
应该有1 and 3
,因为A
是第一个,C
是第三个。因此,对于GCA
,它应为4
和6,
,依此类推。
所以,输出应该如下所示:
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
如果你能给我一个选择,我将不胜感激。
谢谢!
答案 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,并使用它来计算原始文本中字符串的位置。希望这有帮助