使用python中的用户输入创建数组

2024-06-26 01:38:23 发布

您现在位置: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)

Tags: 用户importnumpy元素inputas错误np
3条回答

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

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,如果我复制粘贴相同的内容,我会得到一个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函数输入字符串不同

首先,输入将被视为字符串。您需要获取该字符串并将其转换为列表。这是通过相对于分隔符拆分来实现的。最后,只需使用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]

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

input()函数始终返回字符串。如果您的输入像1234,则必须写入:lst_2=input("PLEASE ENTER THE THING:: ").split('')

相关问题 更多 >