使用 yield 调用函数不输出答案
Calling on function with yield not outputting answer
我正在尝试使用 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()
当我 运行 我目前所拥有的并打印新字典 self.substrings 时,函数 get_all_substrings 的所有值是:
[<generator object Unique.get_all_substrings at 0x00000198A22C7258>]
我知道这与产量有关,但搜索无法帮助我修复它。
self.substrings[key] = list(Unique.get_all_substrings(self.original[key]))
您必须迭代一个生成器才能获得它的值(list
这样做......但违背了生成器的某些目的)
strings = Unique.get_all_substrings(self.original[key])
print next(strings) # get the next one out of the generator
print next(strings) # and the next after that
for string in strings: # get the rest (skips first 2 since already consumed)
print string
通常是您与生成器交互的方式
如果您喜欢生成器行为,您可以 return 一个迭代器
return ( input_string[i:j] for i in range(length) for j in range(i + 1, length + 1))
或者列表理解,如果你想要的实际上是一个列表
return [ input_string[i:j] for i in range(length) for j in range(i + 1, length + 1)]
get_all_substring() 是一个生成器。这意味着如果您遍历它,它将生成值,但是您只是调用它的方法。
如果要存成self.substrings[key]
你可以做类似
self.substrings[key] = list(Unique.get_all_substrings(self.original[key]))
或
self.substrings[key] = [substr for substr in Unique.get_all_substrings(self.original[key])]
如果这是 get_all_substring() 的唯一用例,您绝对不需要生成器。所以你可以简单地删除 yield
键和 return 一个数组。
我正在尝试使用 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()
当我 运行 我目前所拥有的并打印新字典 self.substrings 时,函数 get_all_substrings 的所有值是:
[<generator object Unique.get_all_substrings at 0x00000198A22C7258>]
我知道这与产量有关,但搜索无法帮助我修复它。
self.substrings[key] = list(Unique.get_all_substrings(self.original[key]))
您必须迭代一个生成器才能获得它的值(list
这样做......但违背了生成器的某些目的)
strings = Unique.get_all_substrings(self.original[key])
print next(strings) # get the next one out of the generator
print next(strings) # and the next after that
for string in strings: # get the rest (skips first 2 since already consumed)
print string
通常是您与生成器交互的方式
如果您喜欢生成器行为,您可以 return 一个迭代器
return ( input_string[i:j] for i in range(length) for j in range(i + 1, length + 1))
或者列表理解,如果你想要的实际上是一个列表
return [ input_string[i:j] for i in range(length) for j in range(i + 1, length + 1)]
get_all_substring() 是一个生成器。这意味着如果您遍历它,它将生成值,但是您只是调用它的方法。
如果要存成self.substrings[key] 你可以做类似
self.substrings[key] = list(Unique.get_all_substrings(self.original[key]))
或
self.substrings[key] = [substr for substr in Unique.get_all_substrings(self.original[key])]
如果这是 get_all_substring() 的唯一用例,您绝对不需要生成器。所以你可以简单地删除 yield
键和 return 一个数组。