我正在研究一个倒排索引的搜索程序.索引本身是一个字典,其键是术语,其值本身是短文档的字典,ID号作为键,其文本内容作为值.
为了对两个术语执行"AND"搜索,我需要与他们的帖子列表(词典)相交.在Python中做这个的明确(不一定是过于聪明)的方法是什么?我开始尝试很长的路iter
:
p1 = index[term1]
p2 = index[term2]
i1 = iter(p1)
i2 = iter(p2)
while ... # not sure of the 'iter != end 'syntax in this case
...
Run Code Online (Sandbox Code Playgroud) 有没有办法用with语句开始一段代码,但是有条件地?
就像是:
if needs_with():
with get_stuff() as gs:
# do nearly the same large block of stuff,
# involving gs or not, depending on needs_with()
Run Code Online (Sandbox Code Playgroud)
为了澄清,一种情况会在with语句中包含一个块,而另一种情况可能是同一个块,但不包含(即,好像它没有缩进)
最初的实验当然会给出压痕错误..
python conditional indentation with-statement conditional-statements
我试图用Facebook SDK for Python运行一个基本的例子.我尝试从命令行完成本教程所做的工作(首先使用" pip install facebook
"和pip install facebook-sdk
"成功完成..."):
import Facebook
工作正常,但graph = facebook.GraphAPI()
出现以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'GraphAPI'
Run Code Online (Sandbox Code Playgroud)
我对模块的工作原理并不是很熟悉,但看起来好像facebook
根本不被识别!或者这里缺少其他东西.从命令行,我尝试了这些事情来调查:
>>>dir(facebook)
Run Code Online (Sandbox Code Playgroud)
输出:
['__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__version__']
Run Code Online (Sandbox Code Playgroud)
和...
>>>help(facebook)
Run Code Online (Sandbox Code Playgroud)
输出:
Help on package facebook:
NAME
facebook - TODO: Document your package.
FILE
/Library/Python/2.7/site-packages/Facebook-0.0-py2.7.egg/facebook/__init__.py
PACKAGE CONTENTS
DATA
__loader__ = <zipimporter object "/Library/Python/2.7/site-packages/Fa...
__version__ = 'TODO: Enter …
Run Code Online (Sandbox Code Playgroud) 我有一个树数据类型:
data Tree a b = Branch b (Tree a b) (Tree a b) | Leaf a
Run Code Online (Sandbox Code Playgroud)
......我需要将它作为一个实例Show
而不使用deriving
.我发现很好地显示一个带有两个叶子的小分支很容易:
instance (Show a, Show b) => Show (Tree a b) where
show (Leaf x) = show x
show (Branch val l r) = " " ++ show val ++ "\n" ++ show l ++ " " ++ show r
Run Code Online (Sandbox Code Playgroud)
但是如何将一个漂亮的结构扩展到任意大小的树?似乎确定间距需要我知道底部有多少叶子(或者总共有多少叶子),以便我可以分配我需要的所有空间并且只需要工作. " 我可能需要调用一个大小函数.我可以看到这是可行的,但这是否使它变得更难?
所以我在一个程序中有一个普通的for循环通过一个对象向量(对象是我定义的类型,如果相关的话):
for(int k = 0; k < objects.size(); k++){ ... }
Run Code Online (Sandbox Code Playgroud)
...当我编译时,我得到这个警告:
warning: comparison between signed and unsigned integer expressions
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为我认为size()
一个向量返回一个size_t
.但为什么重要呢?不是一定数量的元素(甚至是内存块)是一个可以计算的整数吗?更重要的是,由于我的程序有多个这样的循环并且发生了很多段错误,这可能是它的一部分吗?
我需要将以下数据类型作为以下实例Show
:
data Tree a b = Branch b (Tree a b) (Tree a b) | Leaf a
Run Code Online (Sandbox Code Playgroud)
我对此很新,但首先,我将此声明解释为
"我们创建了一个名为Tree的新类型,它使用类型a和b进行参数化.树可以是两个东西之一:一个分支,它包含一个b类型的数据,另外两个树,或一个叶子,它持有类型为a的数据项."
现在,我需要做一个很好地"展示"它(嵌套分支等)的方法,而不使用deriving
.到目前为止,我只是在一个模块Main中编写函数,并在解释器窗口中加载/播放它们,所以我之前并没有实际使用构造函数等.尽管如此,我想我可以从我的文件中声明树数据类型开始,如问题开头所示,然后从那里开始.
当我用"Show"搞砸了没有太大的成功时,我想也许我需要在尝试使用整个树之前定义树的一个小组件以及如何首先"显示"它:
data Leaf a = Leaf a
instance Show (Leaf a) where
show (Leaf a) = ???
Run Code Online (Sandbox Code Playgroud)
我在???中尝试了很多东西?现货,比如"a",只是一个单独的,putStrLn等,但当我说出类似的东西时,没有一个打印出来的值a
>show (Leaf 3)
Run Code Online (Sandbox Code Playgroud)
事实上,我在很多情况下遇到过这种情况,这可能意味着我找不到合适的东西:
Ambiguous occurrence `show'
It could refer to either `Main.show', defined at a2.hs:125:1
or `Prelude.show',
imported from `Prelude' at a2.hs:2:8-11
(and originally defined in `GHC.Show')
Run Code Online (Sandbox Code Playgroud)
...我通过调用"Main.show"来解决这个问题,当然这不起作用.
我想问题是,我在哪里可以使用所有这些...或者只是,"我如何修复Leaf"Show"实用程序,以便我可以弄清楚如何扩展它?" (假设我必须先定义它......)
在之前的一个问题中,我展示了(希望是正确的)f(n)= O(g(n))意味着具有充分条件的lg(f(n))= O(lg(g(n)))(例如,lg) (g(n))> = 1,f(n)> = 1,并且n)足够大.
现在,我需要证明OR反驳f(n)= O(g(n))暗示2 ^(f(n))= O(2 ^ g(n))).直观地说,这是有道理的,所以我想我可以在前一个定理的帮助下证明它.我注意到f(n)可以重写为lg(2 ^ f(n))而g(n)只是lg(2 ^ g(n)),这让我很兴奋...这是记录日志我希望证明的两边的基础2,它简化了很多事情!
但我很确定这不起作用.仅仅因为lg(2 ^ f(n))= O(lg(2 ^ g(n)))并不一定意味着2 ^ f(n)= O(2 ^ g(n))...那是向后的从前面的定理(说"暗示",而不是"当且仅当").
我是否需要以另一种方式尝试这种证据,或者我能否真正摆脱我所拥有的(至少作为首发)?
**说到其他方式,也许我可以争论如何将2增加到某个g(n),这个数字"高于"f(n)仍会保持更高?这几乎感觉像一个常识论点,但也许我错过了一些重要的东西..
**哦,哎呀!我忘了补充说f(n)和g(n)是渐近正的.通过我们的教科书定义,这意味着它们"对所有足够大的n都是正面的".
我有一个这样的课:
#include "Blarg.h"
// ...
class Foo : public Bar {
// ...
static double m_value;
// ...
};
Run Code Online (Sandbox Code Playgroud)
而另一个像这样:
template<class X, class Y>
class Blarg : public Bar {
// ...
void SetValue(double _val) { Foo::m_value = _val; }
// ...
};
Run Code Online (Sandbox Code Playgroud)
因为Foo
's m_value
是私有的(我想保持这种方式),我想我会将该SetValue
函数声明为Foo
该类的朋友,以便它可以在需要时访问静态成员.
我在Foo
公共区域内尝试过这些方面的声明:
template<class X, class Y> friend void Blarg<X, Y>::SetValue(double _val);
template<class X, class Y> friend void Blarg::SetValue(double _val);
friend void Blarg::SetValue(double _val);
Run Code Online (Sandbox Code Playgroud)
......但编译没有运气.如果可能,这个的正确语法是什么?
不久前,我尝试了一个据说是双缓冲的OpenGL指南的程序; 它在屏幕上显示一个旋转的矩形.不幸的是,我不再拥有这本书,而且我还没有找到一个清晰明确的缓冲区定义.我的猜测是它是一个绘制东西的"地方",使用很多可能就像分层?
如果是这种情况,我想知道我是否可以使用多个缓冲区来实现多边形裁剪程序.我有一个漂亮的小窗口,允许用户在屏幕上绘制多边形,还有一个实用程序,可以在多边形上拖动和绘制选择框.当用户绘制了选择矩形并放开鼠标时,将根据矩形边界剪切多边形.
这是可行的,但我也希望用户能够重新开始:当按下退出键时,剪辑框应该消失,并且应该恢复原始多边形.由于我是按像素逐行处理的,因此很难弄清楚如何将矩形像素颜色更改为黑色,如背景或特定多边形的颜色,具体取决于绘制的位置(除非我找到)一种在绘制每个多边形像素时保存颜色的方法,但这似乎是过度的.我想知道它是否有助于给矩形提供自己的缓冲区,希望它能像一种透明层一样容易被清除(?)这是缓冲区可以使用的方式,还是我需要的找到另一个解决方案?
我正在尝试在Python中为不一定二进制树实现迭代器类.在使用树的根节点构造迭代器之后,next()
可以重复调用其函数以按深度优先顺序(例如,此顺序)遍历树,最后None
在没有剩余节点时返回.
这是Node
树的基本类:
class Node(object):
def __init__(self, title, children=None):
self.title = title
self.children = children or []
self.visited = False
def __str__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
正如您在上面所看到的,我visited
为第一种方法向节点引入了一个属性,因为我没有看到它的方法.通过额外的状态测量,Iterator
该类看起来像这样:
class Iterator(object):
def __init__(self, root):
self.stack = []
self.current = root
def next(self):
if self.current is None:
return None
self.stack.append(self.current)
self.current.visited = True
# Root case
if len(self.stack) == 1:
return self.current
while self.stack:
self.current = self.stack[-1]
for child in self.current.children:
if not child.visited: …
Run Code Online (Sandbox Code Playgroud) python ×4
c++ ×3
tree ×3
haskell ×2
show ×2
algorithm ×1
big-o ×1
binary-tree ×1
buffer ×1
class ×1
conditional ×1
dictionary ×1
facebook ×1
friend ×1
graphics ×1
indentation ×1
instance ×1
int ×1
intersection ×1
iteration ×1
iterator ×1
logarithm ×1
module ×1
opengl ×1
polygon ×1
proof ×1
size-t ×1
templates ×1
types ×1
vector ×1