Python如何将if语句内的过滤计算值存入外部数组供后续使用
问题解决方法
首先明确原代码的核心问题点:
- 存储数组
coordinates的定义位置错误:放在了遍历CSV行的循环内部,每次循环都会被重置为空,之前存储的内容会全部丢失 return语句位置错误:放在了条件判断和循环内部,程序只要执行到此处就会直接终止函数运行,无法处理完所有CSV行数据- 存在多个未定义变量:
coord、d1、d2没有提前赋值,运行会直接报错 - 变量命名违规:
class是Python保留关键字,不能作为自定义变量名使用 - 逻辑冗余:
Search == Search.lower()这个判断没有实际意义,因为你前面已经将Search赋值为data_values[0].lower(),该判断永远为真
对应的解决方法如下:
- 把
coordinates数组定义在函数最开头、所有循环和判断的外层,确保全函数范围内都可以访问、修改该数组 - 把
return语句移到所有循环的最末尾,等所有CSV行处理完成后再返回结果 - 提前定义所有用到的变量,修改违规的变量名
修改后的可运行代码示例:
def myfunction(csv_File, search, x, y): # 存储数组定义在最外层,全函数可访问 coordinates = [] first_line = True count_row = 0 # 提前定义你用到的参数,替换为实际值即可 d1 = 1 d2 = 1 for data in open(csv_File, 'r', encoding='utf-8'): if first_line: first_line = False continue # 非表头行处理逻辑 count_row += 1 data_values = data.strip().split(",") search_val = data_values[0].lower() x_coordinate = float(data_values[1]) y_coordinate = float(data_values[2]) # 替换class关键字为合法变量名 class_val = data_values[3] # 替换为实际的过滤规则即可 if search_val == search.lower(): # 满足条件的数值直接追加到外层数组 coordinates.append([x_coordinate, y_coordinate]) aQ = coordinates[-1][0] lQ = coordinates[-1][1] coordinates.append(x) coordinates.append([aQ+d1, aQ-d1, lQ+d2, lQ-d2]) # 所有行处理完成后再返回,此处之前可以加其他if逻辑操作coordinates里的全部值 return coordinates # 调用测试 res = myfunction("location_search.csv","ID_391", 1, 1) print(res)
修改后coordinates数组中会存储所有满足过滤条件的数值,你可以在函数内任意位置访问该数组的内容,完成后续的比对、计算操作。
内容的提问来源于stack exchange,提问作者Peanut Jams
相关产品推荐
相关产品推荐

