小编geo*_*909的帖子

在递归函数中传递巨大列表作为参数时的性能?

我正在使用Python,我有一个递归函数,它将一个巨大的列表作为参数之一:

# Current implementation
def MyFunction(arg1, arg2, my_huge_list)
    ...
    ...
    MyFunction(new_arg1, new_arg2, my_huge_list)
Run Code Online (Sandbox Code Playgroud)

如上所示,MyFunction使用相同的列表递归调用my_huge_list; 与其他论点不同,这不会改变.而且,这个名单很大.我的一个朋友建议我可以将其my_huge_list视为一个全局变量来提高性能,否则这个巨大的列表可能会在每次迭代中反复复制.

# Friend's suggestion

MyHugeList=[a,b,c, ...and many many other elements... ]

def MyFunction(arg1, arg2)
    global MyHugeList
    ...
    ...
    MyFunction(new_arg1, new_arg2)
Run Code Online (Sandbox Code Playgroud)

使用如上所示的全局变量是否会提高算法的性能而不是原始版本?我的程序运行了几个星期,所以从长远来看,即使是轻微的改进也许是有价值的.

python recursion performance argument-passing

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

Vim:正则表达式删除除以给定数字列表开头的行之外的所有行

我有一个 csv 文件,其中除了第一行之外的每一行都以数字开头,如下所示:

subject,parameter1,parameter2,parameter3
1,blah,blah,blah
3,blah,blah,blah
2,blah,blah,blah
44,blah,blah,blah
12,blah,blah,blah
14,blah,blah,blah
11,blah,blah,blah
10,blah,blah,blah
11,blah,blah,blah
13,blah,blah,blah
3,blah,blah,blah
...
Run Code Online (Sandbox Code Playgroud)

我想删除除第一行以外的所有行,例如以数字 1,6,12 开头的行。我正在尝试这样的事情:

:g!/^[1 6 12]\|^subject/d
Run Code Online (Sandbox Code Playgroud)

但 12 被解释为“1 或 2”,因此这也会删除以 2 开头的行。

我缺少什么,最有效的方法应该是什么?顺便说一句,我的列表包含许多多个单位数和两位数,而不是 1、6、12。

regex vim regex-negation

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

Python:给定索引列表,访问多维列表的元素

我有一个多维列表F,持有某种类型的元素.因此,如果例如等级为4,则可以通过类似的方式访问F的元素F[a][b][c][d].

给出一个列表L=[a,b,c,d],我想访问F[a][b][c][d].我的问题是我的排名会发生变化,所以我不能只是F[L[0]][L[1]][L[2]][L[3]].

理想情况下,我希望能够做到F[L]并获得元素F[a][b][c][d].我觉得这样的事情可以用numpy完成,但对于我正在使用的数组类型,numpy不适合,所以我想用python列表来做.

我怎么能有类似上面的东西?

编辑:有关我想要实现的具体示例,请参阅Martijn答案中的演示.

python list

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

升序整数列表索引的二进制列表(Python)

我有一个e从0开始的整数升序列表,我希望有一个二进制列表,b其中i-th元素为1,当且仅当i属于e.

例如,如果e=[0,1,3,6],那么这个二进制列表应该是[1,1,0,1,0,0,1],其中第一个1是因为0在e,第二个1是因为1在e,第三个0是因为2不在e,依此类推.

你可以在下面找到我的代码.

我的问题是: python中是否内置了一些内容?如果没有,我的方法是最有效的吗?

def list2bin(e):
b=[1]
j=1
for i in range(1, e[-1]+1):
    if i==e[j]:
        b.append(1)
        j+=1
    else:
        b.append(0)     
return(b)
Run Code Online (Sandbox Code Playgroud)

python binary list

0
推荐指数
1
解决办法
735
查看次数

Python:将元素附加到列表列表的元素

有人可以解释一下以下行为吗?

X=2*[[]]
print X
X[0].append(1)
print X
Run Code Online (Sandbox Code Playgroud)

产量

[[], []]
[[1], [1]]
Run Code Online (Sandbox Code Playgroud)

我希望最后的清单是[[1], []].的确如下

X=[[],[]]
print X
X[0].append(1)
print X
Run Code Online (Sandbox Code Playgroud)

产量

[[], []]
[[1], []]
Run Code Online (Sandbox Code Playgroud)

为何如此区别?

python list append

0
推荐指数
1
解决办法
51
查看次数