Python随机生成列表无法修改问题咨询
嘿,我最近在折腾本地K8s集群,写了个简单的容器化小应用,核心功能就是反转一个数组(提前打个招呼:我可能会把“列表”和“数组”混着用哈😅)。
我先写了两个工具函数:一个用来生成包含随机整数的列表,另一个用来反转这个列表,代码如下:
from random import randint def reverse_array(input): i=0 arr_length = len(input) last_index = arr_length - 1 while i < arr_length / 2: temp = input[i] input[i] = input[last_index - i] input[last_index - i] = temp i=i+1 return input def generate_random_array(max_iteration): return [randint(0, 100) for _ in range(0, max_iteration)]
这两个函数我都写了单元测试,测试下来是正常工作的。但在主程序里调用它们的时候,好像遇到了问题(代码写到一半卡住了):
import util.misc as misc from time import sleep while True: input_arr = misc.generate_random_array(5) reversed_arr = misc.reverse_array(input_...
我现在的困惑是:明明单元测试里函数都正常,为什么在主程序里调用的时候,生成的随机列表没法正常被反转呢?或者是不是我哪里的写法有问题?
可能的问题排查与解决方向
变量名拼写错误:从你截断的代码来看,
reverse_array的参数写的是input_...,但你生成的变量明明是input_arr,大概率是拼写没写完或者打错了,把参数改成input_arr应该就能正常调用了:reversed_arr = misc.reverse_array(input_arr)原地修改的副作用:你的
reverse_array函数是原地修改输入列表,然后再返回它本身。也就是说,调用之后原来的input_arr也会变成反转后的状态,如果想保留原列表的话,可以在反转前先复制一份:# 方法1:用copy()方法复制 reversed_arr = misc.reverse_array(input_arr.copy()) # 方法2:用切片语法复制 reversed_arr = misc.reverse_array(input_arr[:])导入路径验证:如果你的
util/misc.py文件结构不符合Python的导入规则,也可能导致函数调用失败,可以检查下项目目录结构,确保util文件夹下有__init__.py(Python 3.3+可以不用,但加上更稳妥),且主程序的位置能正确找到util模块。
小优化建议
另外,你的reverse_array函数里的判断条件i < arr_length / 2,如果是奇数长度的列表,arr_length/2会得到浮点数(比如长度5的话是2.5),虽然循环到i=2时交换自己和自己不影响结果,但改成整数除法i < arr_length // 2会更严谨:
def reverse_array(input): i = 0 arr_length = len(input) last_index = arr_length - 1 while i < arr_length // 2: # 改用整数除法 temp = input[i] input[i] = input[last_index - i] input[last_index - i] = temp i += 1 # 这里也可以写成i +=1更简洁 return input
备注:内容来源于stack exchange,提问作者Dasph

