小编pau*_*128的帖子

通用添加嵌套列表

给出3个嵌套向量:

 >>> a
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> b
[[10, 20, 30], [40, 50, 60], [70, 80, 90]]
>>> c
[[100, 200, 300], [400, 500, 600], [700, 800, 900]]
Run Code Online (Sandbox Code Playgroud)

我可以将这些向量与map/sum/zip理解一起添加,如下所示:

>>> [map(sum,zip(i,j,k)) for i,j,k in zip(a,b,c)]
[[111, 222, 333], [444, 555, 666], [777, 888, 999]]
Run Code Online (Sandbox Code Playgroud)

我已经手动扩展了这两个列表,但是有一种pythonic方法来概括它来处理任意数量的列表吗?

(Python 2.7不使用外部库首选)

python python-2.7

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

为什么这个正则表达式调用substcont的次数过多?

这更多是出于好奇而不是其他任何事情,因为我没有在Google上找到关于此功能的任何有用信息(CORE :: substcont)

在分析和优化一些旧的,慢的XML解析代码时,我发现以下正则表达式每次执行行时都会调用substcont 31次,并且需要花费大量时间:

通话时间:10000时间:2.65秒子通话:320000潜艇时间:1.15秒

  $handle =~s/(>)\s*(<)/$1\n$2/g;
  # spent  1.09s making 310000 calls to main::CORE:substcont, avg 4µs/call
  # spent  58.8ms making  10000 calls to main::CORE:subst, avg 6µs/call
Run Code Online (Sandbox Code Playgroud)

与前一行相比:

呼叫:10000时间:371ms子呼叫:30000潜艇时间:221ms

  $handle =~s/(.*)\s*(<\?)/$1\n$2/g;
    # spent   136ms making 10000 calls to main::CORE:subst, avg 14µs/call
    # spent  84.6ms making 20000 calls to main::CORE:substcont, avg 4µs/call
Run Code Online (Sandbox Code Playgroud)

substcont调用的数量是非常令人惊讶的,特别是因为我认为第二个正则表达式会更昂贵.这显然是为什么剖析是一件好事;-)

我随后更改了这两行以删除不必要的backrefs,对于表现不佳的行有显着的结果:

通话时间:10000次:393ms次级通话:10000次时间:341ms

$handle =~s/>\s*</>\n</g;
  # spent   341ms making 10000 calls to main::CORE:subst, avg 34µs/call
Run Code Online (Sandbox Code Playgroud)
  • 所以,我的问题是 - 原来为什么要对substcont进行过多次调用,以及substcont甚至在正则表达式引擎中做了多长时间呢?

regex optimization perl profiling

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

SVN Log/diff对已删除目录中的文件

在我的项目中,另一个开发人员重新组织了一些文件,现在我遇到了一些问题: - (我开始认为让webSVN能够显示这些差异很好,现在我'我希望自己能够看到它们!

我知道'svn方式'是将删除视为父目录上的操作,但我的问题因文件位于已删除的子目录中而更加复杂.

原始结构:

 conf/
      files/
            configfile1
            configfile2
Run Code Online (Sandbox Code Playgroud)

这是发生的事情:

$ svn log -vr 5
...
D /conf/files
A /conf/combined_configfile
Run Code Online (Sandbox Code Playgroud)

我想要获得的是在删除发生之前,配置文件中先前引入的更改的差异.像这样的东西会很好:

svn diff -r 2:4 conf/files/configfile1
svn: 'conf/files' is not a working copy
svn: 'conf/files' does not exist
Run Code Online (Sandbox Code Playgroud)

甚至:

svn diff -r 2:4 'conf/files'
svn: 'conf/files' is not under version control
Run Code Online (Sandbox Code Playgroud)

或怎么样:

svn diff -r 2:4 'https://svnhost.localdomain/project1/conf/files'
svn: '/proj1/!svn/bc/1343/conf/files' path not found
Run Code Online (Sandbox Code Playgroud)

看来,获取此历史记录的唯一方法是通过svn操作对目前存在于存储库的头版本中的目录(conf/在本例中),大大扩展diff的范围.

当然必须有更好的方法吗?

svn websvn

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

标签 统计

optimization ×1

perl ×1

profiling ×1

python ×1

python-2.7 ×1

regex ×1

svn ×1

websvn ×1