我尝试使用for循环从一组序列生成子字符串,这样就可以从每个序列中删除所有公共子字符串
我的代码:
class Unique():
def __init__(self, seq = ''):
self.head = head
self.sequence = seq.replace('-','').replace('_','')
self.original = {}
self.substrings = {}
def get_all_substrings(input_string):
length = len(input_string)
for i in range(length):
for j in range(i + 1, length + 1):
yield input_string[i:j]
def sites(self):
self.original[self.head] = self.sequence
for key in self.original:
self.substrings[key] = Unique.get_all_substrings(self.original[key])
#myReader.readFasta simply extracts the header and sequences which I'll be using
for head, seq in myReader.readFasta():
myprog = Unique(seq)
myprog.sites()
当我运行到目前为止所拥有的并打印新的dictionary self.substring时,函数get\u all\u substring的所有值是:
[<generator object Unique.get_all_substrings at 0x00000198A22C7258>]
我知道这与收益率有关,但搜索无法帮助我修复它
get\u all\u substring()是一个生成器。这意味着,如果您遍历它,它将生成值,但是您只调用它的方法
如果你想把它保存到self.substring[key] 你可以这样做
或者
如果这是get\u all\u substring()的唯一用例,那么您肯定不需要生成器。因此,您只需删除
yield
键并返回一个数组必须迭代生成器才能获取其值(
list
这样做。。。但却破坏了发电机的某些功能)通常是如何与生成器交互的
如果您喜欢生成器的行为,可以只返回一个迭代器
或者一个列表,如果你想要的是一个列表
相关问题 更多 >
编程相关推荐