小编Use*_*ser的帖子

检查列表中的所有数字是否与Python中的符号相同?

如何判断列表(或可迭代)的数字是否都具有相同的符号?

这是我的第一个(幼稚)草案:

def all_same_sign(list):

    negative_count = 0

    for x in list:
        if x < 0:
            negative_count += 1

    return negative_count == 0 or negative_count == len(list)
Run Code Online (Sandbox Code Playgroud)

有更多的pythonic和/或正确的方法吗?首先想到的是一旦你有相反的迹象就停止迭代.

更新

到目前为止,我喜欢这些答案,尽管我对表现感到疑惑 我不是一个表演迷,但我认为在处理列表时考虑性能是合理的.对于我的特定用例,我不认为这将是一个大问题,但为了完整这个问题,我认为解决它是好的.我的理解是min和max函数具有O(n)性能.到目前为止,两个建议的答案具有O(2n)性能,而一旦检测到相反的符号,我的上述例程添加短路退出将具有最差的O(n)性能.思考?

python sign list python-2.7

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

有条件地在F#的前进管道中应用过滤器?

我从CSV文件中获取了一系列记录.我希望选择按日期和类型过滤这些记录,并可选择合并符合特定条件的记录.可选地,按日期和类型过滤是直截了当的Seq.filter.但是,我想选择合并符合某些标准的记录.我有功能工作,我只是无法弄清楚如何选择将其应用于结果序列.我不能使用Seq.filter,因为合并操作对整个序列一次不在一个项目上.我可以用一个中间变量来解决它,我只是想知道是否有一种优雅的惯用方法来处理它.

基本上我想知道一种在前向管道序列中有条件地应用链的一个(或多个)部分的方法.

这是我想要的伪代码(options保存命令行参数):

let x =
    getRecords options.filePath
    |> Seq.filter (fun r -> if options.Date.HasValue then
                            r.Date.Date = options.Date.Value.Date else true)
    |> Seq.filter (fun r -> if not(String.IsNullOrEmpty(options.Type)) then
                            r.Type = options.Type else true)
    if options.ConsolidateRecords then
        |> consolidateRecords
Run Code Online (Sandbox Code Playgroud)

f# conditional-statements

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

如何获取web2py中的当前URL?

在web2py中如何获取当前页面的完整URL?我想要浏览器地址栏中显示的(可能已重写的)网址.

例如 http://www.example.com/products/televisions?sort=price&page=2

url web2py

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

Boost.Assign:使用带有map_list_of的对象?

使用C++和boost.在Boost.Assign中,我可以将new运算符与map_list_of一起使用吗?

例如:

std::map<int, MyObject*> objects = boost::assign::map_list_of
       (1, new MyObject())(2, new MyObject())(3, new MyObject())
Run Code Online (Sandbox Code Playgroud)

如果没有,还有另一种方法吗?

c++ boost stdmap

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

传递静态方法作为参数,不需要地址运算符?

class ThreadWorker
{
public:
    ThreadWorker(void);
    virtual ~ThreadWorker(void);

    static void DoSomething();
};


int main()
{
    boost::thread thread1(ThreadWorker::DoSomething);
    boost::thread thread2(ThreadWorker::DoSomething);
    boost::thread thread3(&ThreadWorker::DoSomething);
}
Run Code Online (Sandbox Code Playgroud)

我正在玩Boost.Thread,我注意到在将静态成员函数作为参数传递时是否使用运算符(&)的地址似乎并不重要.没关系吗?如果没有,为什么?一种方式比另一种更正确吗?

c++ static-methods function-pointers member-functions address-operator

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

c ++我应该使用前向声明吗?

我发现这个问题什么时候使用前向声明?这是有用的,但它是描述性的而不是规定性的.

我的场景通常是我使用指向另一个类的指针作为类成员或函数参数,所以我在标题中需要的只是一个前向声明(另外,如果我切换到使用boost shared_ptr,它们将是与使用前向声明兼容?).目前我只是包括标题,但现在我想知道我是否应该使用前向声明.

所以我的问题是,如果我可以使用前瞻性声明,我应该吗?我希望这个问题不是主观的,但如果没有最佳实践答案,那么使用前瞻性声明的利弊是什么?

UPDATE

只是为了扩展shared_ptr问题(我现在没有使用它们,而是考虑切换).如果我要使用它们,我想我会在类中使用typedef的shared_ptr类型.例如:

class Customer
{
public:
    typedef std::tr1::shared_ptr<Customer> SharedPointer;

    Customer() {}   
    virtual ~Customer() {}

    virtual std::string GetName() const;
};
Run Code Online (Sandbox Code Playgroud)

似乎这可能会使事情变得更加混乱.这会对前向声明产生问题,如果是这样,有一个简单的解决方法吗?

c++ include forward-declaration

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

检查shared_ptr的容器是否包含一个指针?

使用观察者模式。我有一个类,例如Monitor,它监视对象的集合。该类是一个Observer,其集合中的每个对象都是Subject。当前,该集合被实现为shared_ptr的std :: list。在Monitor类的Update方法中,我要检查更新是否来自其集合中的对象之一。

std::list<SomeSharedPointer> items_;
...
void Monitor::Update(Subject *subject)
{
    if(subject == something_)
    {
        DoSomething();
    }
    else if
    ??
    // if subject is one of the objects in our collection then do something..

}
Run Code Online (Sandbox Code Playgroud)

这里的主题是原始指针,我的集合是shared_ptr的列表。如何有效检查进入的主题是否是集合中的任何对象?

(请注意,如果有算法解决方案需要一个,则我的编译器msvc将支持lambda)

更新

我应该补充一点,我意识到我可以在容器上使用for循环,但是我想知道是否有一种时髦的方法。

更新2

SomeSharedPointer为一个typedef std::shared_ptr<SomeType>其中SomeType从抽象类派生Subject(标准观察者模式实现)。SomeType将在某个时候调用Notify(),这将为Update()每个观察者调用该方法。

c++ shared-ptr observer-pattern

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

c ++对象参数:多态,值语义,对象生命周期?

当我从C#转换到C++时,我得到了很多建议,尽可能使用值语义.几乎可以肯定的是,如果我在任何地方发布带有指针的问题,并建议它应该是一个值.我开始看到了光,我在代码中找到了很多地方,我可以用堆栈分配的变量(通常是引用)替换动态分配和指针.所以我认为我掌握了使用堆栈分配的对象,并且当调用者中的对象生命周期比被调用者更长时,将它们作为引用传递给其他函数.

但是,当被调用者获得所有权时,我有一个关于按值传递对象的问题.请看以下示例:

class Zoo
{
  void AddAnimal(Animal animal);
  std::list<Animal> animals_;
}
Run Code Online (Sandbox Code Playgroud)

通常从灵活性和单元测试的角度来看,我希望Animal成为一个接口(C++中的抽象类),这样我就可以轻松地发送任意动物并通过模拟实现来模拟它.

在指针实现中,客户端代码将调用它:

Animal animal = new Lion("Bob");
myZoo.AddAnimal(animal);
Run Code Online (Sandbox Code Playgroud)

这里的客户端代码并不真正需要动物对象.它只是暂时构建它以传递给方法.所以在这种情况下,没有共享语义.所以它似乎是价值语义的一个好例子.但是,我的理解是你不能使用Animal作为值传递的参数,因为它是一个抽象类.

我的大多数不采用原始类型的成员函数都采用抽象类参数.那么处理这个问题的C++方法是什么?(那你是如何使用值语义编写C++接口的呢?)

c++ parameters abstract-class object-lifetime dynamic-allocation

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

如何在 numpy 中添加计算/计算列?

假设我有一个 numpy 数组:

1 10
2 20
3 0
4 30
Run Code Online (Sandbox Code Playgroud)

我想添加第三列,其中每行是该行中前两列的总和(或某种任意计算):

1 10 11
2 20 22
3 0  3
4 30 34
Run Code Online (Sandbox Code Playgroud)

我怎么做?

python arrays numpy calculated-columns

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

错误:"无法访问类'boost :: signals2 :: scoped_connection'中声明的私有成员?"

class Whatever
{
public:
    virtual ~Whatever();

protected:
    Whatever();
    virtual void SomeMethod();
    void OnEventOccurred(int x);

    std::vector<boost::signals2::scoped_connection> boostSignalConnections_;
}
Run Code Online (Sandbox Code Playgroud)

// .cpp

Whatever::SomeMethod()
{
    ...
    boostSignalConnections_.push_back(
        anObject->AddEventOccurredObserver(
            std::bind(&Whatever::OnEventOccurred,
                      this, std::placeholders::_1)));
    ...
}
Run Code Online (Sandbox Code Playgroud)

(注意AddEventOccurredObserver只委托boost::signals2::connect()并返回boost::signals2::connection)

我收到以下错误.很难解释模板错误,但似乎错误是在成员声明中引起的std::vector<boost::signals2::scoped_connection> boostSignalConnections_;

...\vc\include\xmemory(202): error C2248:  
    'boost::signals2::scoped_connection::scoped_connection' :
    cannot access private member declared in class 'boost::signals2::scoped_connection'
...\boost_1_47\boost\signals2\connection.hpp(234) : see declaration of
'boost::signals2::scoped_connection::scoped_connection'
...\boost_1_47\boost\signals2\connection.hpp(210) :
    see declaration of 'boost::signals2::scoped_connection'
...\vc\include\xmemory(201) : while compiling class template member function
'void std::allocator<_Ty>::construct(boost::signals2::scoped_connection *,_Ty &&)'
with
[
    _Ty=boost::signals2::scoped_connection
] …
Run Code Online (Sandbox Code Playgroud)

c++ boost noncopyable boost-signals boost-signals2

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