小编Joe*_*ett的帖子

Python的字典映射使用什么哈希算法?

我正忙着制作一个命令行解析器,并想知道什么样的哈希算法python dict的使用?

我设置它的方式,我有一个模式匹配算法,它将标记化的输入序列与字典键匹配.一些键相对较长(长度为5或6个6-7个字符串的元组).我想知道长字典键是否会显着降低密钥检索的效率.

python hashmap

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

如何将两个列表的元素添加到一个列表中?

例如,我有一个这样的列表:

list1 = [good, bad, tall, big]

list2 = [boy, girl, guy, man]
Run Code Online (Sandbox Code Playgroud)

我想制作一个这样的列表:

list3 = [goodboy, badgirl, tallguy, bigman]
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情:

list3=[]
list3 = list1 + list2
Run Code Online (Sandbox Code Playgroud)

但这只会包含值 list1

所以我用过for:

list3 = []
for a in list1:
 for b in list2:
  c = a + b
  list3.append(c)
Run Code Online (Sandbox Code Playgroud)

但它会导致太多列表(在这种情况下,4*4 = 16)

我该怎么办?任何帮助都会非常棒!

python list

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

TLS变量上的"非常线程局部引用常规符号"错误

我在链接期间发生了一个奇怪的问题.

我有一个包含以下定义的头文件foo.hpp:

struct Foo { static __thread int x; }
Run Code Online (Sandbox Code Playgroud)

以及引用该变量的源文件plugin.cpp:

#include "foo.hpp"
void bar() { int y = Foo::x; }
Run Code Online (Sandbox Code Playgroud)

编译很好:

$CXX -stdlib=libc++ -std=c++11 -fvisibility=hidden -fPIC -o plugin.cpp.o -c plugin.cpp
Run Code Online (Sandbox Code Playgroud)

但是当我尝试链接为动态库时:

$CXX -stdlib=libc++ -std=c++11 -fvisibility=hidden -dynamiclib -Wl,-undefined,dynamic_lookup -o libext.dylib ext.cpp.o
Run Code Online (Sandbox Code Playgroud)

我明白了:

ld:非法线程局部变量引用常规符号__ZN3Foo1xE,用于体系结构x86_64

但是llvm字节码意味着编译器正确地将其Foo::x视为TLS变量.

$CXX -stdlib=libc++ -std=c++11 -fvisibility=hidden -fPIC -S -emit-llvm -o -
... omitted
@_ZN3Foo1xE = external thread_local global i32
... omitted
; Function Attrs: nounwind ssp uwtable
define hidden void @_Z3barv() #0 …
Run Code Online (Sandbox Code Playgroud)

c++ linker clang thread-local-storage c++11

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

方法重载装饰器

我正在尝试编写一个为python提供方法重载功能的装饰器,类似于PEP 3124中提到的那个.

我写的装饰器非常适合常规函数,但我不能让它适用于类中的方法.

这是装饰者:

class Overload(object):
    def __init__(self, default):
        self.default_function = default
        self.type_map = {}
        self.pos = None

    def __call__(self, *args, **kwargs):
        print self
        try:
            if self.pos is None:
                pos = kwargs.get("pos", 0)
            else:
                pos = self.pos
            print args, kwargs
            return self.type_map[type(args[pos])](*args, **kwargs)
        except KeyError:
            return self.default_function(*args, **kwargs)
        except IndexError:
            return self.default_function(*args, **kwargs)

    def overload(self, *d_type):
        def wrapper(f):
            for dt in d_type:
                self.type_map[dt] = f
            return self
        return wrapper
Run Code Online (Sandbox Code Playgroud)

当我尝试像这样实现它:

class MyClass(object):
    def __init__(self):
        self.some_instance_var = 1

    @Overload …
Run Code Online (Sandbox Code Playgroud)

python decorator

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

Python - 将元组列表转换为字符串列表

我有一个看起来像这样的元组列表:

[('this', 'is'), ('is', 'the'), ('the', 'first'), ('first', 'document'), ('document', '.')]
Run Code Online (Sandbox Code Playgroud)

什么是最pythonic和有效的方式转换为每个令牌由空格分隔:

['this is', 'is the', 'the first', 'first document', 'document .']
Run Code Online (Sandbox Code Playgroud)

python

8
推荐指数
2
解决办法
8602
查看次数

使用datetime的python默认参数值

我有一个简单的Python脚本,它使用Ctl-C的信号处理程序.如果程序正常完成,则结束时间将传递到"print_results"函数中.我希望print_results函数有一个可选参数,如果没有传递,只需获取当前"现在"时间.但是当我从信号处理程序调用它时,它没有得到正确的时间.

这是我简化但可重复的程序:

import sys
import signal
import urllib2
import urllib
import datetime
import time
import getopt,sys

def signal_handler(signal, frame):
    print_results()
    sys.exit(0)

def print_results(ended=datetime.datetime.now()):
    print "\nEnded at ",ended
    print "Total time: ",(ended - startTime)
    print "Finished ",numIterations," iterations, received ",totalRecords," records"

    numIterations = 0
    maxIterations = 8
    delaySecs = 3
    totalRecords = 0

    # set up signal handler
    signal.signal(signal.SIGINT, signal_handler)

    startTime = datetime.datetime.now()

    print "Starting at ",time.asctime(time.localtime())

    while (numIterations < maxIterations):

        iterStartTime = datetime.datetime.now()

        numIterations += 1

        print "Iteration: ",numIterations

        # …
Run Code Online (Sandbox Code Playgroud)

python datetime

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

将2个列表与通配符匹配的算法

我正在寻找一种匹配2个列表的有效方法,一个包含完整信息,另一个包含通配符.我已经能够使用固定长度的通配符来做到这一点,但我现在正尝试使用可变长度的通配符.

从而:

match( ['A', 'B', '*', 'D'], ['A', 'B', 'C', 'C', 'C', 'D'] )
Run Code Online (Sandbox Code Playgroud)

只要所有元素在两个列表中的顺序相同,它就会返回True.

我正在使用对象列表,但为了简单起见,使用了上面的字符串.

python string algorithm pattern-matching string-matching

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

用Python计算Fiedler向量

如何在Python中找到拉普拉斯算子(L)的守场员矢量?

我可以使用特征值得到特征值和特征向量:特征值,特征向量= linalg.eig(L)

我假设python没有按顺序返回特征值.

我是否采用第二大特征值,然后将其与相应的特征向量匹配(在索引中匹配)?

在订购特征值时,我该如何处理负值?按绝对量级排序?

谢谢你的帮助

python numpy linear-algebra

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

哪个编译器用于生成Microsoft Office for Mac?

我们知道Microsoft Office有Mac版.

只是好奇,谁知道哪个编译器用于生成Microsoft Office for Mac?

当我查看Windows SDK标题"Windows.h"时,我发现以下代码片段:

#ifndef _MAC
#if defined(_68K_) || defined(_MPPC_)
#define _MAC
#endif
#endif
Run Code Online (Sandbox Code Playgroud)

Microsoft是否有适用于Mac的私有C++编译器?如果是这样,我猜编译器必须支持COM(组件对象模型),而gcc则不支持.('支持'表示产品符合COM标准的C++对象)

c++ compiler-construction com macos

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

(又一个)列出别名难题

我以为我找到了整个列表别名的东西,但后来我发现了这个:

    l = [1, 2, 3, 4]
    for i in l:
        i = 0
    print(l)
Run Code Online (Sandbox Code Playgroud)

这导致:

    [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

但是,当我尝试这个时:

    l = [[1, 2], [3, 4], [5, 6]]
    for i in l:
        i[0] = 0
Run Code Online (Sandbox Code Playgroud)

我明白了

    [[0, 2], [0, 4], [0, 5]]
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

这与锯齿的深度有关吗?

python

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