相关疑难解决方法(0)

Python:生成器表达式与yield

在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)等.

一个或另一个的任何优点?思考?


谢谢大家!这些答案中有很多很棒的信息和进一步的参考资料!

python yield generator

82
推荐指数
7
解决办法
3万
查看次数

复制列表中的每个成员 - python

我想写一个复活列表的函数,[1,5,3,6,...][1,1,5,5,3,3,6,6,...] 想知道如何做到这一点?谢谢

python list

31
推荐指数
7
解决办法
2万
查看次数

当其中一个是无限的时如何获得两个迭代的笛卡尔积

假设我有两个可迭代对象,一个是有限的,一个是无限的:

import itertools

teams = ['A', 'B', 'C']
steps = itertools.count(0, 100)
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以避免嵌套的 for 循环并使用itertools模块中的无限迭代器之一,例如cyclerepeat来获取这些迭代器的笛卡尔积。

循环应该是无限的,因为 的停止值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)

python cartesian-product python-itertools

-1
推荐指数
1
解决办法
284
查看次数