我试图以递归方式调用函数,并将列表的一部分传递给函数。
def op3(c,i):
d = []
for l in range(0,len(c),+1):
d.append(c[l])
a, b = [], []
if len(d)>=3:
for l in range(1,len(d)-1,+1):
a.append(d[l])
for l in range(2,len(d),+1):
b.append(d[l])
A,B = [],[]
for j in range(0,len(a),+1):
a[j][i] = a[j][i]+a[j][i+1]
a[j].pop(i+1)
insertf(a,final)
A.append(a[j])
op3(A,i+1)
for k in range(0,len(b),+1):
b[k][i+1] = b[k][i+1]+b[k][i+2]
b[k].pop(i+2)
insertf(b,final)
B.append(b[k])
op3(B,i+1)
但是在第一个嵌套的'for'循环运行后,原始列表中的值在列表'b'中更改为d的新值。 我是python的新手。我已经读过这就是列表在python中的工作原理。有没有解决的办法?
答案 0 :(得分:1)
所有修改过的C风格的循环让我头疼。试图解析...
def op3(c,i):
d = c[:]
if len(d)>=3:
a=d[1:-1]
b=d[2:]
#A,B=[],[]
for item in a:
item[i] += item.pop(i+1)
insertf(a,final) # Totally unknown behaviour, does this modify a?
#A.append(item) # Seems pointless, A ends up a copy of a, and op3
# # does not modify c (only its items)
op3(a,i+1)
for item in b:
item[i+1] += item.pop(i+2)
insertf(b,final)
op3(b,i+1)
因此,根据代码的作用,它需要一个列表列表,并修改内部列表。它还以一种似乎没有停止条件的方式递归调用自身,但如果内部列表用完any((len(ci)<=i+2 for ci in c))
则会中断。
总的来说,我会说我们无法提供一个好的答案,因为这段代码片段并没有表达你想做的事情。这里的关键点似乎是列表不是二维的;每个列表a [j]或b [k]是一个独立的对象(虽然a[j] is b[j-1]
,因为你从同一个列表c)中提取它们,并且不知道你对a,b,c,d的操作中,A,B。
您能否描述一下您所拥有和期望的数据结构,以及您尝试进行哪种处理?感觉有点像适合numpy的一个表达。