小编Mun*_*nna的帖子

<type'generator'>和<type'xrange'>之间的区别

我在很多帖子/材料中看到过xrange(num)是一个生成器/迭代器.我有几个问题.

  1. 我想知道类型'xrange'和类型'generator'之间的确切区别
  2. 如果xrange是一个迭代器/生成器,它应该有.next()方法.我不明白为什么.next()方法不适用于下面的情况.

    def generator():
        for i in xrange(20): yield i
    
    Run Code Online (Sandbox Code Playgroud)

    在上面的例子中,

        numbers = generator()
        for i in numbers: 
            if i == 6: break
    
        for i in numbers:
            if i == 10: break
            print i
    
        >>> 7
        8
        9
    
        >>> print numbers.next()
        11 
    
    Run Code Online (Sandbox Code Playgroud)

    上述功能也适用于以下类型的对象生成器:

        >>> numbers = (x for x in range(100))
    
    Run Code Online (Sandbox Code Playgroud)

    如果我使用xrange操作,循环开始从头开始迭代,并且没有next()操作.我知道我们可以采取以下方式:

        for i in xrange(20):
            if (#something):
                var = i
                break
         #perform some operations
         for i in range(var,20):
             #Do something
    
    Run Code Online (Sandbox Code Playgroud)

但我想在var之后循环继续而不使用var.

简而言之,xrange是否存在next()类型的操作.如果是的话:'怎么样?' ,否则:'为什么?'

python iterator generator

5
推荐指数
1
解决办法
1479
查看次数

为什么地图功能无效?

我没有受到打击或任何事情,但我觉得这很奇怪。以下是我处理过的代码片段:

from hashClass import HashTable

a = HashTable(11)
input_value = list((54,26,93,17,77,31,44,55,20))

map(lambda x: a.put(x,x),input_value))
print(a.data)
Run Code Online (Sandbox Code Playgroud)

我创建了自己的哈希表类。它有一个叫做 put 的方法,它接受键值对,“HashTable.data”属性显示表中的所有值。

当我对普通键值对使用 put 方法时,它完全正常。我知道可以使用以下方法实现该解决方案:

for i in input_value: a.putt(i,i)
Run Code Online (Sandbox Code Playgroud)

但是我想知道为什么地图功能不起作用?当我尝试使用“put”方法映射每个 input_value 时,如果我没有错,它必须将该值添加到实例中。我的原因是我可能没有使用映射的值,但在我映射时在语法上,它应该更新实例变量。

下面是我创建的哈希类以供参考。

class HashTable(object):

    def __init__(self,size):
        self.size = size
        self.slots = self.size*[None]
        self.data = self.size*[None]
        self.values = 0

    def put(self,key,value):
        hashValue = self.hashFunction(key)
        if self.slots[hashValue] == None:
            self.slots[hashValue] = key
            self.data[hashValue] = value
            self.values += 1
        elif self.slots[hashValue] == key:
            self.data[hashValue] = value
        else:
            hashValue = self.reHash(hashValue)
            while self.slots[hashValue] != None and …
Run Code Online (Sandbox Code Playgroud)

python dictionary class python-3.x

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

标签 统计

python ×2

class ×1

dictionary ×1

generator ×1

iterator ×1

python-3.x ×1