繁体   English   中英

python生成器for..in vs next()

[英]python generator for..in vs next()

我对python的生成器有点困惑,在它们上使用for循环与使用next()

我需要解析一个文本文件,该文件包含有关每行汽车的信息,每辆汽车的强制性行后有多个非强制性行,其型号名称以a.开头a. 所以我想以蟒蛇般的方式遍历汽车。

我有以下代码:

lines = """a. car1 model
b. car1 price
c. car1 details
a. car2 model
b. car2 price
a. car3 model
b. car3 price
c. car3 details
d. car3 comments
"""

def iter_cars(lineit):
   res = []
   for line in lineit:
       if line.startswith('a') and res:
           yield res
           res = []

       res.append(line)
   yield res

# print the cars with next..., 
lineit = iter(lines.split('\n'))
print(next(iter_cars(lineit)))
print(next(iter_cars(lineit)))
print(next(iter_cars(lineit)))

# reset the iterator and print the cars with for
lineit = iter(lines.split('\n'))
for car in iter_cars(lineit):
    print(car)

输出为:

# using next()
a. car1 model
b. car1 price
c. car1 details

b. car2 price

b. car3 price
c. car3 details
d. car3 comments


# using for..in
a. car1 model
b. car1 price
c. car1 details

a. car2 model
b. car2 price

a. car3 model
b. car3 price
c. car3 details
d. car3 comments

为什么两个输出不同? 为什么next()跳过a. 每辆车先行后? 如何重写迭代器,以便使用next()产生(嘲笑)与使用for..in相同的结果?

您每次都实例化生成器。 尝试这个

gen = iter_cars(lineit)
print(next(gen))
print(next(gen))
print(next(gen))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM