如何使用 Python(全局范围)中的函数操作列表?
How do I manipulate a list with a function in Python (global scope)?
我有一个包含整数和字符串的列表 l = [1, 2, 'a', 'b']
,我想编写一个函数来获取该列表并以一种仅包含整数的方式对其进行操作。
函数输出看起来像我想要的,但它不会更改 "original" 列表。
def filter_list(l):
temp =[]
for item in l:
if type(item) == int:
temp.append(item)
l = temp
return l
Function output: [1, 2]
Variable explorer: [1,2,'a','b']
相比之下,函数
def manipulate(l):
l.append("a")
return l
Function output: [1, 2, 'a', 'b', 'a']
Variable explorer: [1, 2, 'a', 'b', 'a']
更改 "original" 列表。
- 这两个函数有什么区别,即为什么
第二个操纵我的 "original" 列表,但第一个没有?
- 如何调整函数 1 以获得所需的输出?
谢谢!
在python中,所有对象都通过引用传递给函数,这意味着您可以更改传递给函数的对象。这就是为什么当您在第二个示例中调用 append
方法时列表发生变化的原因。
但是,如果您将不同的对象分配给传递的参数 (l = temp
),则您更改了引用本身,因此无法从外部范围对原始对象进行更改。不过,这在您的情况下不是问题,因为您 return 新参考,在这种情况下您应该如此。
我有一个包含整数和字符串的列表 l = [1, 2, 'a', 'b']
,我想编写一个函数来获取该列表并以一种仅包含整数的方式对其进行操作。
函数输出看起来像我想要的,但它不会更改 "original" 列表。
def filter_list(l):
temp =[]
for item in l:
if type(item) == int:
temp.append(item)
l = temp
return l
Function output: [1, 2]
Variable explorer: [1,2,'a','b']
相比之下,函数
def manipulate(l):
l.append("a")
return l
Function output: [1, 2, 'a', 'b', 'a']
Variable explorer: [1, 2, 'a', 'b', 'a']
更改 "original" 列表。
- 这两个函数有什么区别,即为什么
第二个操纵我的 "original" 列表,但第一个没有? - 如何调整函数 1 以获得所需的输出?
谢谢!
在python中,所有对象都通过引用传递给函数,这意味着您可以更改传递给函数的对象。这就是为什么当您在第二个示例中调用 append
方法时列表发生变化的原因。
但是,如果您将不同的对象分配给传递的参数 (l = temp
),则您更改了引用本身,因此无法从外部范围对原始对象进行更改。不过,这在您的情况下不是问题,因为您 return 新参考,在这种情况下您应该如此。