相关疑难解决方法(0)

在Python中重置生成器对象

我有多个yield返回的生成器对象.准备调用这台发电机是相当费时的操作.这就是我想多次重用发生器的原因.

y = FunctionWithYield()
for x in y: print(x)
#here must be something to reset 'y'
for x in y: print(x)
Run Code Online (Sandbox Code Playgroud)

当然,我正在考虑将内容复制到简单的列表中.

python yield generator

133
推荐指数
8
解决办法
6万
查看次数

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

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

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万
查看次数

正确的方法来重置csv.reader多次迭代?

有一个自定义迭代器的问题,它只会迭代文件一次.我seek(0)在迭代之间调用相关的文件对象,但是在第二次运行StopIteration的第一次调用时抛出next().我觉得我忽略了一些显而易见的事情,但我会对此有一些新的看法:

class MappedIterator(object):
    """
    Given an iterator of dicts or objects and a attribute mapping dict, 
    will make the objects accessible via the desired interface.

    Currently it will only produce dictionaries with string values. Can be 
    made to support actual objects later on. Somehow... :D
    """

    def __init__(self, obj=None, mapping={}, *args, **kwargs):

        self._obj = obj
        self._mapping = mapping
        self.cnt = 0

    def __iter__(self):

        return self

    def reset(self):

        self.cnt = 0

    def next(self):

        try:

            try: …
Run Code Online (Sandbox Code Playgroud)

python csv iterator

10
推荐指数
1
解决办法
1万
查看次数

Python——迭代一个迭代器两次

编辑:这里有一个类似的问题涉及迭代器重置。然而,下面接受的答案解决了嵌套迭代器的实际问题,并处理了一个容易错过的问题,即嵌套迭代器不会重置。

有没有办法在 python 中迭代迭代器两次?

在下面的示例代码中,我可以看到第二次迭代与第一次迭代在同一对象上运行,因此产生了奇怪的结果。将此与下面的 C# 进行对比,得到我想要的结果。

有什么办法可以做我想做的事。我想知道是否可以复制迭代器或“检索”它来自的函数,但也许有一种更简单的方法。(我知道我可以在下面的玩具示例中调用MyIter()两次,但如果我不知道迭代器来自哪里并且不是我想要的,那么这是没有用的!)。

def MyIter():
  yield 1;
  yield 2;
  yield 3;
  yield 4;

def PrintCombos(x):
  for a in x:
      for b in x:
          print(a,"-",b);

PrintCombos(MyIter());
Run Code Online (Sandbox Code Playgroud)

给出

1 - 2
1 - 3
1 - 4
Run Code Online (Sandbox Code Playgroud)

对比:

static IEnumerable MyIter()
{
    yield return 1;
    yield return 2;
    yield return 3;
    yield return 4;
}

static void PrintCombos(IEnumerable x)
{
    foreach (var a in x)
        foreach (var b in x)
            Console.WriteLine(a + "-" …
Run Code Online (Sandbox Code Playgroud)

python iterator for-loop yield generator

7
推荐指数
1
解决办法
5160
查看次数

有没有办法同时用python中的大于和小于2来评估两个案例?

我正在尝试使用21列和大量行对数据集进行分类.我已经达到了可以将数据作为csv导入并打印出单独列的程度.我还有两件事要做.首先,我希望能够打印出特定的数据点.例如,位于第2行第4列的数据点.第二个任务是根据第4列和第5列对数据行进行分类.这些列是纬度和经度.而我正在尝试获取世界特定部分的行.所以我的想法就是这样

if  60 > row[4] > 45 and 165 > row[1] > 150:
Run Code Online (Sandbox Code Playgroud)

即(如数学运算(9> x> 5))

我不确定上述程序的正确方法是什么.

我已将代码粘贴到底部.我是python编程的新手,所以随时指出错误.

import csv
path = r'C:\Documents and Settings\eag29278\My Documents\python test code\test_satdata.csv'
with open(path, 'rb') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        print row [0]
        #this prints out the first column 

    var1 = []

    for row in f:

       if  60 > row[4] > 45 and 165 > row[1] > 150:

          var1.append(row)

print var1
Run Code Online (Sandbox Code Playgroud)

更新1

好吧所以我更新了代码,但是当我运行模块时,我得到了这个输出..

2010 2010 2010 2010 2010 2010 …

python csv classification

2
推荐指数
1
解决办法
125
查看次数

Python - 没有消耗的迭代器中的计数元素

给定一个迭代器it,我想要一个函数it_count,它返回迭代器产生的元素数,而不会破坏迭代器.例如:

ita = iter([1, 2, 3])
print(it_count(ita))
print(it_count(ita))
Run Code Online (Sandbox Code Playgroud)

应该打印

3
3
Run Code Online (Sandbox Code Playgroud)

有人指出,对于所有迭代器来说,这可能不是一个明确定义的问题,所以我不是在寻找一个完全通用的解决方案,但它应该在给定的例子中按预期运行.


好的,让我进一步澄清我的具体案例.给出以下代码:

ita = iter([1, 2, 3])
itb, itc = itertools.tee(ita)
print(sum(1 for _ in itb))
print(sum(1 for _ in itc))
Run Code Online (Sandbox Code Playgroud)

...我们可以编写it_count上面描述的函数,以便它以这种方式运行吗?即使问题的答案是"无法做到",这仍然是一个完全有效的答案.它不会让问题变得糟糕.并且证明它是不可能的将远非微不足道的......

python

2
推荐指数
2
解决办法
1430
查看次数

标签 统计

python ×6

csv ×2

generator ×2

iterator ×2

yield ×2

classification ×1

for-loop ×1