在Python中,通过生成器表达式创建生成器对象与使用yield语句之间有什么区别吗?
使用产量:
def Generator(x, y):
for i in xrange(x):
for j in xrange(y):
yield(i, j)
Run Code Online (Sandbox Code Playgroud)
使用生成器表达:
def Generator(x, y):
return ((i, j) for i in xrange(x) for j in xrange(y))
Run Code Online (Sandbox Code Playgroud)
这两个函数都返回生成元组的生成器对象,例如(0,0),(0,1)等.
一个或另一个的任何优点?思考?
谢谢大家!这些答案中有很多很棒的信息和进一步的参考资料!
我想写一个复活列表的函数,[1,5,3,6,...]
并[1,1,5,5,3,3,6,6,...]
想知道如何做到这一点?谢谢
假设我有两个可迭代对象,一个是有限的,一个是无限的:
import itertools
teams = ['A', 'B', 'C']
steps = itertools.count(0, 100)
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以避免嵌套的 for 循环并使用itertools模块中的无限迭代器之一,例如cycle或repeat来获取这些迭代器的笛卡尔积。
循环应该是无限的,因为 的停止值steps预先未知。
预期输出:
$ python3 test.py
A 0
B 0
C 0
A 100
B 100
C 100
A 200
B 200
C 200
etc...
Run Code Online (Sandbox Code Playgroud)
带有嵌套循环的工作代码:
from itertools import count, cycle, repeat
STEP = 100
LIMIT = 500
TEAMS = ['A', 'B', 'C']
def test01():
for step in count(0, STEP):
for team in TEAMS:
print(team, step)
if …Run Code Online (Sandbox Code Playgroud)