Python 3.7问题。
我确实有一个看起来像这样的文件:1 10 10 10 3 25 29 10 52 55 30 70 70 20 0
其中1表示将有1行,3表示3将要出现,0标记为文件末尾。如何实现呢?
我试过了
def read_each_course(filename):
with open(filename, 'r') as f:
lines = []
content = f.readlines()
lines += [x.rstrip() for x in content]
for i in lines:
while True:
if str(i).count(" ") == 0:
lines_to_read = int(i)
break
return lines_to_read, next(i)
但这行不通
TypeError: 'str' object is not an iterator
for the next(i).
我的想法是获取清单列表,例如:[[[1,[10,10,10]],[3,[25,29,10],[52,55,30],[70, 70,20]]]`
但是,我不确定该设计总体上是否是个好主意?还是应该将其作为一个链表,因为最终目标是因为3个数字是坐标,所以我只需要使用下一个项目,例如x2-x1,y2-y1,如果不计入罚款(额外费用)总成本是炒作。我可以计算出xy三角形的个数。
问题来源:stackoverflow
RomainL对答案的这一修订简化了逻辑。
它利用迭代器来解析文件。
def read_each_course(filename):
result = []
with open(filename) as f:
it = iter(f)
while True:
count = int(next(it))
if count == 0: # Found the stop marker
break
current = [count]
for _ in range(count):
current.append([int(v) for v in next(it).strip().split()])
result.append(current)
return result
print(read_each_course("file2.txt"))
根据需要输出。
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。