我想编写一个函数printAll(),它只接受那些实现Iterable实现的元素,这样我就可以迭代它们并打印元素.我怎么做?
我只是将我的一些代码更新到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) 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) 家庭作业:请指导我帮助指导我,而不发布完整的代码
我的导师让我们实现了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) 我有一个简单的功能如下
comdList = range(0,27)
for t, in comdList:
print t
Run Code Online (Sandbox Code Playgroud)
但是它返回一个in对象而不是可迭代的错误
在功能之外,它工作正常.这是怎么回事??
任何人都可以解释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中从头开始实施朴素贝叶斯 " 的博客文章
从博客中,这是用于定义按类类型分隔数据库的函数的代码.
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__'.那么它是如何在函数内部工作的?
我正在阅读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) 使用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) 为什么这是真的:
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) iterable ×10
python ×7
int ×2
java ×2
python-2.7 ×2
callback ×1
collections ×1
for-loop ×1
generics ×1
iterator ×1
linked-list ×1
match ×1
regex ×1
scala ×1
scala-2.9 ×1
scrapy ×1
string ×1
tensorflow ×1
types ×1