相关疑难解决方法(0)

为什么我不能在同一数据上迭代两次?

老实说,我在这里有点困惑,为什么我不能在相同的数据上迭代两次?

def _view(self,dbName):
    db = self.dictDatabases[dbName]
    data = db[3]

    for row in data:
        print("doing this one time")

    for row in data:
        print("doing this two times")
Run Code Online (Sandbox Code Playgroud)

这将打印出"一次这样做"几次(因为数据有几行),但它根本不会打印出"这样做两次"......

我第一次迭代数据工作正常,但第二次当我运行最后一个列表"for data in data"时,这没有返回...所以执行它一次工作但不是两次......?

仅供参考 - 数据是一个csv.reader对象(如果是这样的原因)......

python

34
推荐指数
4
解决办法
2万
查看次数

首次使用后,zip变量为空

Python 3.2.3,使用Idle,Python shell

t = (1,2,3)
t2 = (5,6,7)
z = zip(t,t2)

for x in z :
    print(x)
Run Code Online (Sandbox Code Playgroud)

结果:(1,5)(2,6)(3,7)

完全使用相同的循环代码再次在for循环中显示z(在上一部分和下一部分之间不做任何事情):

for x in z :
    print(x)
Run Code Online (Sandbox Code Playgroud)

结果:(空白,无结果)

z仍然存在,如

z
Run Code Online (Sandbox Code Playgroud)

结果是

<zip object at 0xa8d48ec>
Run Code Online (Sandbox Code Playgroud)

我甚至可以重新分配t,t2再次拉链,但是它只能再次使用一次而且只能工作一次.

它应该如何工作?在http://docs.python.org/3.2/library/functions.html#zip的文档中没有提到这一点.

python python-3.x

15
推荐指数
3
解决办法
2261
查看次数

筋疲力尽的迭代器 - 怎么办呢?

(在Python 3.1中)(与我提出的另一个问题有些相关,但这个问题是关于迭代器已经用尽了.)

# trying to see the ratio of the max and min element in a container c
filtered = filter(lambda x : x is not None and x != 0, c)
ratio = max(filtered) / min(filtered)
Run Code Online (Sandbox Code Playgroud)

我花了半个小时才意识到问题是什么(过滤器返回的迭代器在到达第二个函数调用时已经耗尽).如何以最Pythonic /规范的方式重写它?

另外,除了获得更多经验之外,我还能做些什么来避免这种错误呢?(坦率地说,我不喜欢这种语言功能,因为这些类型的错误很容易制作,很难捕捉到.)

python iterator filter python-3.x

5
推荐指数
3
解决办法
3597
查看次数

标签 统计

python ×3

python-3.x ×2

filter ×1

iterator ×1