相关疑难解决方法(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万
查看次数

为什么可迭代对象不是迭代器?

这是我的代码:

from collections import deque

class linehistory:
    def __init__(self, lines, histlen=3):
        self.lines = lines
        self.history = deque(maxlen=histlen)

    def __iter__(self):
        for lineno, line in enumerate(self.lines,1):
            self.history.append((lineno, line))
            yield line

    def clear(self):
        self.history.clear()


f = open('somefile.txt')
lines = linehistory(f)
next(lines)
Run Code Online (Sandbox Code Playgroud)

错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
    TypeError: 'linehistory' object is not an iterator
Run Code Online (Sandbox Code Playgroud)

我不知道为什么linehistory对象不是迭代器,因为它已经__iter__the类中包含了方法.

python iterator

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

int对象不可迭代?

inp = int(input("Enter a number:"))

for i in inp:
    n = n + i;
    print (n)
Run Code Online (Sandbox Code Playgroud)

...抛出一个错误: 'int' object is not iterable

我想通过添加每个数字找出总数,例如,110.1 + 1 + 0 = 2.我该怎么做?

谢谢

python int loops

16
推荐指数
4
解决办法
19万
查看次数

Python如何在内部管理'for'循环?

我正在尝试学习Python,我开始使用一些代码:

a = [3,4,5,6,7]
for b in a:
    print a
    a.pop(0)
Run Code Online (Sandbox Code Playgroud)

输出是:

[3, 4, 5, 6, 7]
[4, 5, 6, 7]
[5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

我知道在我循环的时候改变数据结构并不是一个好的做法,但我想了解Python在这种情况下如何管理迭代器.

主要问题是:如果我改变状态,它如何知道它必须完成循环a

python for-loop data-structures

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

迭代器也是可迭代的吗?

我找到:

>>> a={'x':42, 'y':3.14, 'z':7}
>>> b=a.__iter__()
>>> b.__dir__()
['__next__', ..., '__iter__', ...]
>>> b
<set_iterator object at 0x7efdd4e5afc0>
Run Code Online (Sandbox Code Playgroud)

迭代器是否总是有__iter__方法?

根据/sf/answers/691898161/,迭代器也是可迭代的.如果迭代器总是有__iter__方法是真的吗?

python methods iterator iterable python-3.x

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

检测是否将使用迭代器

是否有统一的方法来了解迭代是否会使用可迭代对象?

假设您有一个特定的函数crunch,它要求参数的可迭代对象,并多次使用它.就像是:

def crunch (vals):

    for v in vals:
        chomp(v)

    for v in vals:
        yum(v)
Run Code Online (Sandbox Code Playgroud)

(注意:将两个for循环合并在一起不是一个选项).

如果使用不是列表的iterable调用函数,则会出现问题.在以下调用中,yum函数永远不会执行:

crunch(iter(range(4))
Run Code Online (Sandbox Code Playgroud)

我们原则上可以通过重新定义crunch函数来解决这个问题,如下所示:

def crunch (vals):
    vals = list(vals)

    for v in vals:
        chomp(v)

    for v in vals:
        yum(v)
Run Code Online (Sandbox Code Playgroud)

但如果调用的话,这将导致使用两倍的内存crunch:

hugeList = list(longDataStream)
crunch(hugeList)
Run Code Online (Sandbox Code Playgroud)

我们可以通过这样定义来解决这个crunch问题:

def crunch (vals):
    if type(vals) is not list:
        vals = list(vals)

    for v in vals:
        chomp(v)

    for v in vals:
        yum(v)
Run Code Online (Sandbox Code Playgroud)

但仍然存在colud,其中调用代码将数据存储在某些内容中

  • 不能消费
  • 不是一个清单

例如:

from collections …
Run Code Online (Sandbox Code Playgroud)

python

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

在期望的原始文本文件中迭代,收到字符串对象

我正在尝试构建一个朴素的贝叶斯分类器,如此链接中所述. 参考这条线

X_new_tfidf = tfidf_transformer.transform(X_new_counts)
Run Code Online (Sandbox Code Playgroud)

Training the Classifier副标题下,我有一个类似的行,X_new_counts = count_vect.transform(input.plot_movie)在我的代码中应该使用iterable作为转换函数的输入.它 input是来自DataFrame的记录,属于类型pd.Series并包含以下条目,我将其input.plot_movie作为输入发送到转换函数:

在此输入图像描述

但是,我收到以下错误: Iterable over raw text documents expected, string object received

我该如何解决这个错误?我也提到了这个答案,其中人说这s是一个可迭代的,因为它被分配了一个字符串.我也碰到这个环节,其中一个TypeError: 'String' object is not iterable遇到.我在这里错过了什么吗?这些联系似乎相互矛盾.

编辑: 我刚刚意识到这input.plot_movie是unicode类型,并决定将其转换为字符串.我再次遇到同样的错误.

python string iterator

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

为什么类需要__iter __()来返回迭代器?

为什么类需要定义__iter__()返回self,以获取类的迭代器?

class MyClass:
    def __init__(self):
        self.state = 0

    def __next__(self):
        self.state += 1
        if self.state > 4:
            raise StopIteration
        return self.state

myObj = MyClass()
for i in myObj:
    print(i)
Run Code Online (Sandbox Code Playgroud)

控制台日志:

Traceback (most recent call last):
   for i in myObj:
TypeError: 'MyClass' object is not iterable
Run Code Online (Sandbox Code Playgroud)

答案/sf/answers/691898161/,说

迭代器是具有next(Python 2)或__next__(Python 3)方法的对象.

添加以下内容的任务:

def __iter__(self):
   return self
Run Code Online (Sandbox Code Playgroud)

是返回定义方法的迭代器或类的对象__next__().

但是,当MyClass在myObj = MyClass()行中实例化时,不是返回MyClass对象(定义__next__()方法)的任务,而是由__new__()MyClass实例化了吗?

类定义__next__()方法的对象不是自己的迭代器吗?

我已经研究了问题__iter__方法中返回self的用途是什么?构建一个基本的Python迭代器,但我仍然无法理解 …

python iterator class python-3.x

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

sqlalche/psycopg2中带有整数的IN子句

只是初学者使用python/postgres组合,请原谅我,如果这是微不足道的.我正在使用sqlalchemy执行原始SQL查询:

SELECT * FROM table WHERE pk_table_id IN ()
Run Code Online (Sandbox Code Playgroud)

对于下面的示例,我尝试self.ids了包含字符串或整数的元组以及包含字符串或整数的数组.无论哪种方式,它都无法正常工作.

当我使用这一行时:

my_connection.execute('SELECT * FROM public.table WHERE pk_table_id IN (%s)', self.ids)
Run Code Online (Sandbox Code Playgroud)

我收到错误:

TypeError: not all arguments converted during string formatting
Run Code Online (Sandbox Code Playgroud)

有什么建议?

python sql postgresql

8
推荐指数
3
解决办法
4185
查看次数

理解这一行:list_of_tuples = [,x,y)x,y,data_one中的标签]

正如你已经明白我是一个初学者,我正在努力理解编写这个函数的"Pythonic方式"是什么.我知道其他线程可能包含对此的部分答案,但我不知道该寻找什么,因为我不明白这里发生了什么.

这行是我朋友发给我的代码,用于改进我的代码:

import numpy as np

#load_data:
def load_data():
    data_one = np.load ('/Users/usr/... file_name.npy') 
    list_of_tuples = []
    for x, y, label in data_one:
        list_of_tuples.append( (x,y) )
    return list_of_tuples

print load_data()
Run Code Online (Sandbox Code Playgroud)

"改进"版本:

import numpy as np

#load_data:
def load_data():
    data_one = np.load ('/Users/usr.... file_name.npy') 
    list_of_tuples = [(x,y) for x, y, label in data_one]
    return list_of_tuples

print load_data()
Run Code Online (Sandbox Code Playgroud)

我想知道:

  1. 这里发生了什么?
  2. 是更好还是更差的方式?因为它是"Pythonic"我认为它不适用于其他语言,所以也许最好习惯更普通的方式?

python numpy list-comprehension

8
推荐指数
3
解决办法
745
查看次数