用python创建一个用户输入的数组



我想连接一个包含不同元素大小的数组作为用户输入不幸的是,它没有与用户输入工作,我得到了以下错误"值错误:零维数组不能被连接"我不明白它是如何正常工作的,但与用户输入不工作?

import numpy as np 
#lst_2=np.concatenate([[1],[2],np.repeat(3,3),[2]])
lst_2=input("PLEASE ENTER THE THING:: ")
print('OKKKKL',lst_2)
np.concatenate(lst_2)

好的,更详细地说,您创建了一个列表:

In [251]: alist = [[1],[2],np.repeat(3,3),[2]]
In [252]: alist
Out[252]: [[1], [2], array([3, 3, 3]), [2]]

并将concatenate应用于该列表:

In [253]: np.concatenate(alist)
Out[253]: array([1, 2, 3, 3, 3, 2])

对于input,如果我复制n-粘贴同样的东西,我得到一个string:

In [254]: astr = input()
[[1],[2],np.repeat(3,3),[2]]
In [255]: astr
Out[255]: '[[1],[2],np.repeat(3,3),[2]]'

引号很重要。concatenate不工作:

In [256]: np.concatenate(astr)
Traceback (most recent call last):
File "<ipython-input-256-95017eec7f88>", line 1, in <module>
np.concatenate(astr)
File "<__array_function__ internals>", line 5, in concatenate
ValueError: zero-dimensional arrays cannot be concatenated

必须先将字符串转换为列表:

In [257]: alist1 = eval(astr)    # better ast.literal_eval
In [258]: alist1
Out[258]: [[1], [2], array([3, 3, 3]), [2]]
In [259]: np.concatenate(alist1)
Out[259]: array([1, 2, 3, 3, 3, 2])

作为代码输入字符串与通过input函数输入字符串是不同的。

input()函数总是返回一个字符串。如果你的输入像1234,你必须写:lst_2=input("PLEASE ENTER THE THING:: ").split('')

首先,输入将作为字符串。你需要把那个字符串转换成一个列表。这是通过相对于分隔符进行拆分来实现的。最后,只需使用np.array从列表创建一个数组。np.concatenate用于将已经是数组的对象组合在一起。

import numpy as np 
raw_input=input("PLEASE ENTER THE THING:: ")
# here i use space, but anything can be the separator
input_list = raw_input.split(" ") 
# dtype is optional, but unless you specify it, it will be `string`
arr = np.array(input_list, dtype=int) 

更新:

如果你想要重复的元素,就像你说的,你可以给出一对数字,作为输入,像这样:

import numpy as np 
user_input = input("PLEASE ENTER THE THING:: ")
input_list = user_input.split(",") 
print(input_list)
arr = np.concatenate(
[np.repeat(int(pair.split(' ')[0]), 
int(pair.split(' ')[1])) 
for pair in input_list]
)
print(arr)
# example input: 1 10,2 3,4 4
# output [1 1 1 1 1 1 1 1 1 1 2 2 2 4 4 4 4]

这里用","分隔成对每对中的数字用一个空格隔开。该脚本将重复第一个数字,次数与第二个数字指定的次数相同。为了使其工作,请确保在输入数字时,逗号后不要添加空格。

最新更新