def tokens(filename):
with open(filename) as infile:
for line in infile:
for item in line.split():
yield int(item)
def ballots(tokens):
ballot = []
for t in tokens:
if t:
ballot.append(t)
else:
yield ballot
ballot = []
t = tokens("datafile.txt")
for b in ballots(t):
print b
使用generator:
这将逐行读取文件,在所有空白处拆分,并将行中的标记逐个追加到列表中。每当达到0时,该选票将被
yield
,列表重置为空。在对我来说,解决这个问题最直接的方法就是使用发电机。在
我看到@katrielex在我发布我的解决方案时发布了一个生成器。我们的不同之处在于我使用了两个独立的生成器,一个用于文件中的单个标记,另一个用于您希望解析的特定数据结构。前者作为参数传递给后者,其基本思想是您可以为要解析的每个数据结构编写一个类似
ballots()
的函数。您可以迭代生成器生成的所有内容,也可以在任一生成器上调用next()
以获得下一个令牌或选票(准备好在用完时出现StopIteration
异常,或者编写生成器在实际数据用完时生成一个sentinel值,如None
,并进行检查)。在在一个类中包装整个东西是非常简单的。事实上。。。在
^{pr2}$相关问题 更多 >
编程相关推荐