Python 转到生成器中的特定迭代
Python go to specific iteration in generator
我正在寻找一种方法来导航到生成器对象中的特定迭代。
我有一个遍历 JSON 个对象列表的生成器对象。我没有一次加载所有这些对象,而是创建了一个生成器,以便每个 JSON 对象仅在每次迭代时加载。
def read_data(file_name):
with open(file_name) as data_file:
for user in data_file:
yield json.loads(user)
但是,现在我正在寻找某种方法来导航到第 n 次迭代以检索有关该用户的更多数据。我能想到的唯一方法是遍历生成器并在第 n 个枚举处停止:
n = 3
data = read_data(file_name)
for num, user in enumerate(data):
if num == n:
<retrieve more data>
有更好的方法吗?
应该这样做:
from itertools import islice
def nth(iterable, n, default=None):
"Returns the nth item or a default value"
return next(islice(iterable, n, None), default)
这是众多 useful utilities included in the itertools
documentation 之一。
我正在寻找一种方法来导航到生成器对象中的特定迭代。
我有一个遍历 JSON 个对象列表的生成器对象。我没有一次加载所有这些对象,而是创建了一个生成器,以便每个 JSON 对象仅在每次迭代时加载。
def read_data(file_name):
with open(file_name) as data_file:
for user in data_file:
yield json.loads(user)
但是,现在我正在寻找某种方法来导航到第 n 次迭代以检索有关该用户的更多数据。我能想到的唯一方法是遍历生成器并在第 n 个枚举处停止:
n = 3
data = read_data(file_name)
for num, user in enumerate(data):
if num == n:
<retrieve more data>
有更好的方法吗?
应该这样做:
from itertools import islice
def nth(iterable, n, default=None):
"Returns the nth item or a default value"
return next(islice(iterable, n, None), default)
这是众多 useful utilities included in the itertools
documentation 之一。