小编flo*_*onk的帖子

迭代列表中的所有连续项对

给出一个清单

l = [1, 7, 3, 5]
Run Code Online (Sandbox Code Playgroud)

我想迭代所有连续列表项对(1,7), (7,3), (3,5),即

for i in xrange(len(l) - 1):
    x = l[i]
    y = l[i + 1]
    # do something
Run Code Online (Sandbox Code Playgroud)

我想以更紧凑的方式做到这一点,比如

for x, y in someiterator(l): ...
Run Code Online (Sandbox Code Playgroud)

有没有办法使用内置的Python迭代器来做到这一点?我确定该itertools模块应该有一个解决方案,但我无法弄明白.

python iterator list

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

在Python中是否有高斯消除的标准解决方案?

scipy/numpy/...高斯消除矩阵的标准方法的宇宙中是否存在某个地方?

人们通过谷歌找到了许多片段,但如果可能的话,我更愿意使用"可信"的模块.

python numpy matrix

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

git add后自动显示状态

我通常的git工作流程是

<make changes>
git add FILES
git status
git commit -m "some remarks"
Run Code Online (Sandbox Code Playgroud)

我需要在哪里git status检查我是否添加了正确的文件.

有没有办法告诉git每个人后自动显示状态git add

git

11
推荐指数
3
解决办法
2405
查看次数

为什么Python装饰器的参数在语法上与没有参数的参数不同?

本文从各种stackoverflow问题中多次链接,描述了带参数的装饰器在语法上与不带参数的装饰器的区别.

  • 没有参数的装饰器:"请注意,这__init__()是执行装饰的唯一方法,__call__()每次调用装饰时都会调用它sayHello()."
  • 带参数的装饰器:"现在装饰过程调用构造函数,然后立即调用__call__(),只能接受一个参数(函数对象),并且必须返回替换原始的装饰函数对象.请注意,__call__()现在只调用一次,在装修期间,之后您返回的装饰功能将__call__()用于实际通话."

文章中给出的解释并没有告诉我为什么语言是这样建立的:

虽然这种行为是有道理的 - 构造函数现在用于捕获装饰器参数,但该对象__call__()不能再用作装饰函数调用,因此您必须使用它__call__()来执行装饰 - 它仍然是令人惊讶的第一次你看到了

此设置有两个相关功能让我感到不舒服:

  1. 为什么提供一种方法来制作无参数装饰器,这不仅仅是指定装饰器的更通用方法的特例?为什么使用__init____call__在这两个,但他们意味着不同的事情?
  2. 为什么__call__在具有参数的装饰器的情况下使用除了调用装饰函数之外的其他目的(顾名思义,至少来自无参数情况)?由于__call__只有后立即调用__init__,为什么不直接传递给装饰作为参数传递给函数__init__和处理,将在发生一切__call____init__呢?

python arguments callable decorator

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

在python igraph中更改单个顶点属性

对于给定的图形,g我无法更改单个顶点属性(在本例中'color'):

from igraph import Graph

# create triangle graph
g = Graph.Full(3)

cl_blue = (0,0,.5)
cl_red = (.5,0,0)

g.vs['color'] = 3*[cl_blue]
g.vs['color'][0] = cl_red
Run Code Online (Sandbox Code Playgroud)

这样做后,print g.vs['color']仍然给出

[(0, 0, 0.5), (0, 0, 0.5), (0, 0, 0.5)]
Run Code Online (Sandbox Code Playgroud)

如何为单个项目分配值?

python list igraph

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

同情的多元泰勒近似

我的目标是使用sympy哪个来编写多维泰勒近似

  • 使用尽可能多的内置代码,
  • 计算两个变量的给定函数的截断泰勒近似
  • 返回没有 Big-O-remainder项的结果,例如in sin(x)=x - x**3/6 + O(x**4).

这是我到目前为止尝试的内容:

方法1

天真地,人们可以只series为每个变量组合两次命令,遗憾的是这不起作用,如本例所示sin(x*cos(y)):

sp.sin(x*sp.cos(y)).series(x,x0=0,n=3).series(y,x0=0,n=3)
>>> NotImplementedError: not sure of order of O(y**3) + O(x**3)
Run Code Online (Sandbox Code Playgroud)

方法2

基于这篇文章,我首先写了一个1D泰勒近似:

def taylor_approximation(expr, x, max_order):
    taylor_series = expr.series(x=x, n=None)
    return sum([next(taylor_series) for i in range(max_order)])
Run Code Online (Sandbox Code Playgroud)

用1D示例检查它可以正常工作

mport sympy as sp
x=sp.Symbol('x')
y=sp.Symbol('y')
taylor_approximation(sp.sin(x*sp.cos(y)),x,3)

>>> x**5*cos(y)**5/120 - x**3*cos(y)**3/6 + x*cos(y)
Run Code Online (Sandbox Code Playgroud)

不过,如果我知道这样做既扩张做一个链接调用xy,sympy挂断

# this does not work
taylor_approximation(taylor_approximation(sp.sin(x*sp.cos(y)),x,3),y,3)
Run Code Online (Sandbox Code Playgroud)

有人知道如何解决这个问题或以另一种方式实现它吗?

python sympy computer-algebra-systems symbolic-computation

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

如何使用类方法初始化类成员

我有一个类,它包含一些成员x(例如,所有实例都需要但独立于它们的一些数据):

class Foo(object):
    x = 23

    # some more code goes here    
Run Code Online (Sandbox Code Playgroud)

现在,确定的过程x变得更加复杂,而且我希望能够x在某些时间“刷新”,所以我决定为其编写一个额外的函数

class Foo(object):
    @classmethod
    def generate_x(cls):
        cls.x = 23

    # some more code goes here
Run Code Online (Sandbox Code Playgroud)

但是,该类定义缺少 的初始化调用generate_x

到目前为止我尝试过的:

这不起作用:

class Foo(object):

    # generate_x()     # NameError: name 'generate_x' is not defined
    # Foo.generate_x() # NameError: name 'Foo' is not defined

    @classmethod
    def generate_x(cls):
        cls.x = 23
Run Code Online (Sandbox Code Playgroud)

这可行,但不太清楚,因为代码是在类定义之外使用的

class Foo(object):

    @classmethod
    def generate_x(cls):
        cls.x = 23

    # ...
Foo.generate_x()
Run Code Online (Sandbox Code Playgroud)

有更好的替代方案吗?这里使用的是@classmethod最好的方法吗?我正在搜索的是 …

python oop class-method

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

我是否更喜欢使用点(.)或箭头( - >)运算符来访问C++中的指针成员?

正如我刚刚了解到的,对于一个指针p,有两种等效的方式来访问被引用对象的成员,即p->foo(*p).foo.

是否有最适合使用的技术论据?

注意:我读到的一个论点是,.它更安全,因为它不能重载,而->可以.但是,我想,必须有更多的参数,因为在我工作的大多数C++代码中,我只看到->-construct.

c++ oop pointers

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

使用预定义的lisp代码从shell启动emacs

可以从shell启动emacs并告诉它执行lisp函数,例如

emacs -f some-lisp-function my_file.py
Run Code Online (Sandbox Code Playgroud)

但是,我想通过参数传递lisp函数,比如

emacs -f "(goto-line 10)" my_file.py
# --> not working
Run Code Online (Sandbox Code Playgroud)

并且在最好的世界中,传递更复杂的由多个函数调用组成的lisp代码,例如

emacs -f "(goto-line 10) (some-other-func some-arg)" my_file.py
# --> not working
Run Code Online (Sandbox Code Playgroud)

有人知道吗?

编辑:为了澄清这一点,我需要一种方法来打开它之后评估文件自己的缓冲区中的lisp代码.

(顺便说一句.我知道goto-line问题可以在不使用的情况下以不同的方式解决,-f但这只是我一般问题的一个例子)

lisp emacs shell

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

如何在 C++ 初始化列表中将 const 引用成员初始化为另一个成员(std 向量)

_numbers我执行了以下操作,作为允许通过以下方式对成员容器进行只读访问的廉价方法numbers

class Foo {
    Foo() : _numbers({}), numbers(_numbers) {
    // some code that populates `numbers` via `numbers.push_back(...)`
}

private:
    std::vector<int> _numbers;
public:
    const std::vector<int>& numbers;
}
Run Code Online (Sandbox Code Playgroud)

然而,这样做我发现它numbers是空的,而在其他情况下它将包含与 相同的元素_numbers

更准确地说,这似乎是未定义的行为。在我的真实示例(这是一个简化版本)中,我有多个采用此方案的引用容器对,其中填充的数据在某些对的常量引用成员中可见,而对于某些对则不可见。

知道这有什么问题吗?非常感谢任何帮助。

编辑这是一个最小的工作示例:

#include <vector>

struct Foo2 {
public:
     const int max1;
     const int center1;

    Foo2(const int max1_);
private:
    std::vector<int> _numbers1, _numbers2;

public:
    const std::vector<int>& numbers1, numbers2;
};

Foo2::Foo2(const int max1_)
    : max1(max1_), center1(max1_/2),
      _numbers1({}), _numbers2({}),
      numbers1(_numbers1),
      numbers2(_numbers2)
{
    cout << max1 …
Run Code Online (Sandbox Code Playgroud)

c++ initialization initializer-list const-reference

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