Python使用用户输入拼接数组报零维数组无法拼接错误问题
问题原因
input()函数的返回值始终是字符串类型,你硬编码时传入的[[1],[2],np.repeat(3,3),[2]]是Python列表结构,二者完全不是一种数据类型。- 你直接把字符串传入
np.concatenate时,numpy会将单个字符串识别为0维数组,不符合拼接要求,因此抛出Zero-dimensional arrays can not be concatenated错误。
解决方法
需要先将用户输入的字符串解析为Python可识别的序列结构:
- 如果输入都是纯字面量(无函数调用),推荐使用
ast.literal_eval(比原生eval更安全,不会执行恶意代码)完成解析 - 如果输入包含
np.repeat这类函数调用,确认输入来源安全的前提下,可以使用eval完成解析
修正后的代码如下:
import numpy as np import ast # 获取用户输入 input_str = input("PLEASE ENTER THE THING:: ") # 无函数调用的安全解析方式 # lst_2 = ast.literal_eval(input_str) # 包含函数调用、确认输入安全时用的解析方式 lst_2 = eval(input_str) print('OKKKKL', lst_2) result = np.concatenate(lst_2) print(result)
输入示例
运行代码后,在输入提示处直接输入你硬编码时的列表内容即可:
[[1],[2],np.repeat(3,3),[2]]
注意:如果输入内容包含np.repeat这类numpy方法,需要保证当前代码环境已经导入numpy并起了np别名,否则会解析失败
内容的提问来源于stack exchange,提问作者msci
相关产品推荐
相关产品推荐

