小编Bjö*_*lex的帖子

将集合转换为frozensets作为字典的值

我有字典作为我的对象的初始化的一部分.我知道在对象的生命周期中它不会改变.字典将键映射到集合.我想将所有值从sets 转换为frozensets,以确保它们不会被更改.目前我这样做:

for key in self.my_dict.iterkeys():
    self.my_dict[key] = frozenset(self.my_dict[key])
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来实现这一目标?我不能frozenset马上建立,因为在构建完整的字典之前,我不会在每个集合中有多少项目.

python dictionary set

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

为什么在Python中不能统一处理集合?

集合和列表在Python中的处理方式不同,似乎没有统一的方法可以同时使用它们.例如,set使用该add方法完成向a添加项目,并且list使用该append方法完成.我知道这背后有不同的语义,但也存在常见的语义,并且通常与某些集合一起使用的算法更多地关注共性而不是差异.C++ STL表明这可以工作,为什么Python中没有这样的概念?

编辑:在C++中,我可以使用an output_iterator来存储(几乎)任意类型的集合中的值,包括列表和集合.我可以编写一个算法,它将这样的迭代器作为参数并将元素写入其中.然后,该算法完全不知道支持迭代器的容器(或其他设备,可能是文件)的类型.如果后备容器是忽略重复项的集合,那么这是调用者的决定.我的具体问题是,现在我已经多次使用过,例如我用于list某个任务,后来认为set更合适.现在我必须在我的代码中的几个地方更改appendto add.我只是想知道为什么Python没有这种情况的概念.

python collections

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

在堆栈上创建一个对象,然后通过引用传递给C++中的另一个方法

我来自C#背景到C++.假设我有一个方法在堆栈的方法中创建一个对象,然后我将它传递给另一个类方法,该方法将它添加到一个memeber向量.

void DoStuff()
{
    SimpleObj so = SimpleObj("Data", 4);
    memobj.Add(so); 
}

//In memobj
void Add(SimpleObj& so)
{
   memVec.push_back(so); //boost::ptr_vector object
}
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  1. 一旦DoStuff方法结束,那么会超出范围并从堆栈中弹出?
  2. memVec有一个指向这样的指针,但它弹出了这里发生的事情?
  3. 什么是将堆栈对象传递给将它们存储为指针的方法的正确方法?

我意识到这些对C++程序员来说可能是显而易见的.

标记

c++ gcc boost memory-management

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

如何将一定数量的字符从文件复制到STL-way的向量?

如果我想将文件的内容复制到矢量,我可以这样做:

std::ifstream file("path_to_file");
std::vector<char> buffer(std::istream_iterator<char>(file), 
                         std::istream_iterator<char>());
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我只想复制第一个n字符,我该怎么做?

编辑我可以编写自己的版本copy,但有没有办法只使用现有的组件?

c++ stl

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

列表追加循环问题

如何修改此代码以生成3个列表,每个列表包含5个元素,而不是现在; 3个列表包含5/10/15个元素?

import random

y = []

def autoSolve():
    for i in range(5):
        z = random.randrange(1, 10)
        y.append(z)
    print(y, end="")

for i in range(3):
    print("number", i + 1,)
    autoSolve()
    print()
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

C++使用命名空间语句

namespace MyNamespace
{
    static void foo1()
    {

    }
}

using namespace MyNamespace;

class MyClass
{
    void foo2()
    {
        ::foo1();
    }    
};
Run Code Online (Sandbox Code Playgroud)

范围解析操作::意味着在全局命名空间中使用方法.我们可以在这里使用::foo1().这意味着方法foo1()在全局命名空间中,对吗?

我的问题是,是否using namespace ANAMESPACE_NAME意味着我们将命名空间中的所有元素导入ANAMESPACE_NAME全局命名空间?

c++ namespaces

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

new和delete处理多线程问题

我正在读一本书高效的C++:性能编程技术作者如下关于全局new和delete运算符:

它们在进程上下文中管理内存,并且由于进程可能会生成多个线程,new()并且delete()必须能够在多线程环境中运行.此外,内存请求的大小可能因请求而异.

第6章中单线程内存池.

这是真的?我认为C++没有多线程环境的概念,程序员需要处理的是通过使用某种互斥方式.

c++ multithreading new-operator

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

错误:没有名为qgis的模块

我正在研究Python26,pyqt4设计器和QGIS.我的代码文件(.py文件)包含:

   import sys
   from PyQt4 import QtGui, QtCore
   from qgis.core import *
   from qgis.gui import *
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行它时会出错:

Traceback (most recent call last):
  File "C:\rt_sql_layer_working\DlgQueryBuilder.py", line 29, in <module>
    from qgis import core,gui
ImportError: No module named qgis
Run Code Online (Sandbox Code Playgroud)

我已将环境变量中的PATH设置为

C:\Program Files\Quantum GIS Wroclaw\bin
C:\Program Files\Quantum GIS Wroclaw\apps\qgis\bin
Run Code Online (Sandbox Code Playgroud)

python pyqt qgis

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

将命令行输出写入文件

我正在编写一个脚本来清理我的桌面,根据文件类型移动文件.看起来,第一步是ls -1 /Users/user/Desktop(我在Mac OSX上).那么,使用Python,我将如何运行命令,然后将输出写入特定目录中的文件?由于这将是未记录的,并且我将是唯一的用户,如果它使用,我不介意(更喜欢?)os.system().

python unix macos ls file

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

静态对象数组

public class Array                                                               
{
    static String[] a = new String[] {"red", "green", "blue"};
    static Point[] p = new Point[] {new Point(1, 2), "3,4"};

    public static void main(String[] args)
    {
        System.out.println("hello");
    }

    class Point
    {
        int x;
        int y;

        Point(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

        Point(String s)
        {
            String[] a = s.split(",");
            x = a[0].parseInt();
            y = a[1].parseInt();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的程序中,静态Point数组初始化失败,报告错误:

Array.java:4: non-static variable this cannot be referenced from a static context …
Run Code Online (Sandbox Code Playgroud)

java

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