如何解决函数内部列表的某些更新会传播,而其他的则不会,为什么?
请考虑以下两个简单功能,以将最后一项从列表中删除:
def pop(arr):
return arr.pop()
def my_pop(arr):
last = arr[-1]
arr = arr[:-1] # update the array
return last
让a = list(range(10))
。
使用第一种方法并打印出[pop(a) for i in range(3)]
,我得到了[9,8,7],并且a
已按预期进行了更改。但是,如果我使用第二种方法,则会得到[9,9,9]并且a
完全没有改变。是什么原因导致这些差异?
我想这是由于Python中的分配是通过指针进行的。那是对的吗?另外,关于参数更新如何传播到函数外部是否有经验法则?
解决方法
为了更改数组,需要将命令import 'dart:io';
import 'dart:math';
foo (array){
var diff = [];
var size = 2;
var answ = 2;
for (int i = 0; i < array.length - 1; i++){
diff.add(array[i + 1] - array[i]);
}
for (int i = 1; i < diff.length; i++){
if (diff[i] == diff[i - 1]){
size++;
}
else{
size = 2;
}
answ = max(answ,size);
}
return answ;
}
void main() {
var N = int.parse(stdin.readLineSync());
for (int i = 0; i < N; i++){
var M = int.parse(stdin.readLineSync());
String s = stdin.readLineSync();
var intArray = [];
s.trim().split(" ").forEach((x) => intArray.add(int.parse(x)));
print("Case #${i + 1}: ${foo(intArray)}");
}
}
(分配给本地参数)更改为arr = arr[:-1]
(分配给数组索引)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。