标签: iterable

如何创建仅接受实现Iterable的元素的方法

我想编写一个函数printAll(),它只接受那些实现Iterable实现的元素,这样我就可以迭代它们并打印元素.我怎么做?

java generics collections types iterable

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

如何在Scala 2.9.0中覆盖Iterable.flatMap?

我只是将我的一些代码更新到2.9.0,而且我遇到了一个问题.我有一个特性,我称之为"NonStrictIterable"(基本上,一切都应该尽可能地懒惰 - NonStrictIterable之外的代码本身不应该运行,直到某人实际要求一个元素).

但是在2.9.0中,我似乎无法覆盖flatMap.这是一个减少版本,显示错误:

import scala.collection.generic.CanBuildFrom

trait NonStrictIterable[A] extends Iterable[A] { self =>
  def iterator: Iterator[A]

  override def flatMap[B, That](f: A => TraversableOnce[B])(implicit bf: CanBuildFrom[Iterable[A], B, That]): That = {
    new NonStrictIterable[B] {
      def iterator = self.iterator flatMap { a: A => f(a).toIterable.iterator }
    }.asInstanceOf[That]
  }
}
Run Code Online (Sandbox Code Playgroud)

这曾经在2.9.0之前工作,但现在我得到"方法flatMap覆盖任何东西".查看Iterable.flatMap的方法签名,我看到TraversableOnce类型签名已更改为enTraversableOnce.做出相应的改变

import scala.collection.GenTraversableOnce
import scala.collection.generic.CanBuildFrom

trait NonStrictIterable[A] extends Iterable[A] { self =>
  def iterator: Iterator[A]

  override def flatMap[B, That](f: A => GenTraversableOnce[B])(implicit bf: CanBuildFrom[Iterable[A], B, That]): That = { …
Run Code Online (Sandbox Code Playgroud)

iterable scala lazy-evaluation scala-2.9 scala-collections

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

'int'对象不可迭代

7.3并且想知道为什么在下面的例子中字符串"racecar"被视为int类型.在此先感谢您的帮助

>>> s = "racecar"

>>> for i in len(s):

    print(s[i]) 

Traceback (most recent call last):

  File "<pyshell#9>", line 1, in <module>

    for i in len(s):

TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)

python string int iterable

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

Java:实现自己的Linked LIst - >在哪里定义hasNext(),next(),remove()?

家庭作业:请指导我帮助指导我,而不发布完整的代码

我的导师让我们实现了LinkedList作为家庭作业.这是类的shell的标题:

public class LinkedList<T> implements Iterable<T>, Iterator<T>
Run Code Online (Sandbox Code Playgroud)

请注意,他正在实现Iterable和Iterator接口.然后我明白我需要在我的类中实现iterator(),hasNext(),next()和remove()方法.令我困惑的是,他没有将Iterator接口所需的方法放在一个单独的内部类中.以下所有方法都在LinkedList类中定义:

/*
 * (non-Javadoc)
 * 
 * @see java.lang.Iterable#iterator()
 */
@Override
public Iterator<T> iterator()
{
    return null;
}

/*
 * (non-Javadoc)
 * 
 * @see java.util.Iterator#hasNext()
 */
@Override
public boolean hasNext()
{
    return false;
}

/*
 * (non-Javadoc)
 * 
 * @see java.util.Iterator#next()
 */
@Override
public T next()
{
    return null;
}

/*
 * (non-Javadoc)
 * 
 * @see java.util.Iterator#remove()
 */
@Override
public void remove()
{

}
Run Code Online (Sandbox Code Playgroud)

iterator()方法不应该返回类似于:

public Iterator<T> iterator()
{
    return new MyClassIterator(front);
} …
Run Code Online (Sandbox Code Playgroud)

java iterator iterable linked-list

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

python对象在函数中没有可迭代的错误

我有一个简单的功能如下

comdList = range(0,27)
for t, in comdList:
    print t
Run Code Online (Sandbox Code Playgroud)

但是它返回一个in对象而不是可迭代的错误

在功能之外,它工作正常.这是怎么回事??

python for-loop iterable python-2.7

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

scrapy如何处理Request的回调函数结果?

任何人都可以解释scrapy如何调用并处理Request的回调函数结果?

我理解scrapy可以接受Object(Request,BaseItem,None)或Iterable对象的结果.例如:

1.返回对象(Request或BaseItem或None)

def parse(self, response):
    ...
    return scrapy.Request(...)
Run Code Online (Sandbox Code Playgroud)

2.返回Irablerable对象

def parse(self, response):
    ...
    for url in self.urls:
        yield scrapy.Request(...)
Run Code Online (Sandbox Code Playgroud)

我认为他们在scrapy的代码中处理得像这样.

# Assumed process_callback_result is a function that called after 
# a Request's callback function has been executed.
# The "result" parameter is the callback's returned value

def process_callback_result(self, result):

    if isinstance(result, scrapy.Request):
        self.process_request(result)

    elif isinstance(result, scrapy.BaseItem):
        self.process_item(result)

    elif result is None:
        pass

    elif isinstance(result, collections.Iterable):
        for obj in result:
            self.process_callback_result(obj)
    else:
        # show error message
        # ...
Run Code Online (Sandbox Code Playgroud)

<PYTHON_HOME>/Lib/site-packages/scrapy/core/scraper.py …

python iterable callback scrapy

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

Python中的int对象可以在函数内迭代吗?

我正在尝试跟随一篇名为" 如何在Python中从头开始实施朴素贝叶斯 " 的博客文章

从博客中,这是用于定义按类类型分隔数据库的函数的代码.

def separateByClass(dataset):
    separated = {}
    for i in range(len(dataset)):
        vector = dataset[i]
        if (vector[-1] not in separated):
            separated[vector[-1]] = []
        separated[vector[-1]].append(vector)
    return separated
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么vector[-1]是正确使用时vector是一个int类型的对象.如果我在函数外逐个尝试相同的命令,那么代码行vector[-1]显然会抛出一个TypeError: 'int' object has no attribute '__getitem__'.那么它是如何在函数内部工作的?

python int iterable

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

Python的迭代是否真的将所有值存储在内存中?

我正在阅读e-satisf'回答"yield"关键字在Python中的作用?.他说:

这些迭代很方便,因为你可以根据自己的意愿阅读它们,但是你将所有的值存储在内存中,当你有很多值时,这并不总是你想要的

我真的不同意.但我不能在那里发表评论.

然后是这个问题:Python的迭代是否真的将所有值存储在内存中?

我曾经这么认为.但是自从我昨天看到Python的详细文档以来,我改变了我的观点.

>>> import sys
>>> def gen(): 
...   n = 0                                                                                          
...   while n < 10:                                                                                 
...     yield n                                                                                     
...     n += 1
...
>>> a = [0,1,2,3,4,5,6,7,8,9]
>>> b = range(10)  # b is a range object, which is a iterable
>>> c = gen(10)    # c is a iterator, which is a iterable too
>>> sys.getsizeof(a)
144
>>> sys.getsizeof(b)
48
>>> sys.getsizeof(c)
72
>>> B = list(b)                                                                                     
>>> C = list(c)                                                                                     
>>> …
Run Code Online (Sandbox Code Playgroud)

python iterable

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

为什么使用正则表达式finditer()而不是findall()

使用finditer()if 的优点findall()是什么? findall()返回所有匹配项,同时finditer()返回匹配对象,该对象不能直接作为静态列表处理.

例如:

import re
CARRIS_REGEX = (r'<th>(\d+)</th><th>([\s\w\.\-]+)</th>'
                r'<th>(\d+:\d+)</th><th>(\d+m)</th>')
pattern = re.compile(CARRIS_REGEX, re.UNICODE)
mailbody = open("test.txt").read()
for match in pattern.finditer(mailbody):
    print(match)
print()
for match in pattern.findall(mailbody):
    print(match)
Run Code Online (Sandbox Code Playgroud)

输出:

<_sre.SRE_Match object at 0x00A63758>
<_sre.SRE_Match object at 0x00A63F98>
<_sre.SRE_Match object at 0x00A63758>
<_sre.SRE_Match object at 0x00A63F98>
<_sre.SRE_Match object at 0x00A63758>
<_sre.SRE_Match object at 0x00A63F98>
<_sre.SRE_Match object at 0x00A63758>
<_sre.SRE_Match object at 0x00A63F98>

('790', 'PR. REAL', '21:06', '04m')
('758', 'PORTAS BENFICA', '21:10', '09m')
('790', 'PR. …
Run Code Online (Sandbox Code Playgroud)

python regex iterable match string-matching

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

为什么tf.Variable是可迭代的但不能迭代

为什么这是真的:

from collections import Iterable
import tensorflow as tf

v = tf.Variable(1.0)
print(isinstance(v, Iterable))

True
Run Code Online (Sandbox Code Playgroud)

而这个

iter(v)
Run Code Online (Sandbox Code Playgroud)

TypeError: 'Variable' object is not iterable.
Run Code Online (Sandbox Code Playgroud)

python iterable python-2.7 tensorflow

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