给出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不使用外部库首选)
这更多是出于好奇而不是其他任何事情,因为我没有在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)
在我的项目中,另一个开发人员重新组织了一些文件,现在我遇到了一些问题: - (我开始认为让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的范围.
当然必须有更好的方法吗?