对于一个赋值,我必须在不使用Python中的内置函数的情况下过滤列表。这里是我的代码:在Python中过滤字符串列表
def satisfiesF(L):
result = 0
i = 0
L1 = []
while i < len(L):
s = L[i]
if f(s) == True :
result += 1
L1.append(L[i])
i += 1
L = L1
print L
return result
def f(s):
return 'a' in s
L = ['a', 'b', 'a']
print satisfiesF(L)
print L
它打印:
['a', 'a']
2
['a', 'b', 'a']
为什么第二L不一样,第一个?我已经搜索了几个小时,但我不明白。在我看来,这里L是通过引用传递的,所以为什么价值没有变化?
我试过改变线L = L1
L = list(L1)
但结果是一样的。
我明白,但我怎么避免呢?我如何更改L?我刚刚发现,“Python语言中的所有参数(参数)都是通过引用传递的,这意味着如果你改变了一个函数中引用的参数,那么这个改变也反映回调用函数”(http:// www。 tutorialspoint.com/python/python_functions.htm) –
你可以通过在顶层声明它(你已经完成)并将一个不同的名称传递给你的函数来改变L,比如'L''并且从里面改变L的值该功能将完成这项工作。 –
或者你根本不需要传递任何参数,因为它是全局声明的。 –