我正在使用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)
使用如上所示的全局变量是否会提高算法的性能而不是原始版本?我的程序运行了几个星期,所以从长远来看,即使是轻微的改进也许是有价值的.
我有一个 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。
我有一个多维列表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答案中的演示.
我有一个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) 有人可以解释一下以下行为吗?
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)
为何如此区别?