获取用户输入的数字列表

时间:2011-01-11 22:21:23

标签: python list raw-input

我尝试使用raw_input()来获取数字列表,但是使用代码

numbers = raw_input()
print len(numbers)

输入[1,2,3]给出7的结果,所以我猜它将输入解释为字符串。有没有直接的方法来制作清单?也许我可以使用re.findall来提取整数,但如果可能的话,我宁愿使用更多的Pythonic解决方案。

18 个答案:

答案 0 :(得分:74)

在Python 3.x中,使用它。

a = [int(x) for x in input().split()]

实施例

>>> a = [int(x) for x in input().split()]
3 4 5
>>> a
[3, 4, 5]
>>> 

答案 1 :(得分:57)

解析由空格分隔的数字列表要容易得多,而不是试图解析Python语法:

Python 3:

s = input()
numbers = list(map(int, s.split()))

Python 2:

s = raw_input()
numbers = map(int, s.split())

答案 2 :(得分:6)

eval(a_string)将字符串计算为Python代码。显然这不是特别安全。您可以使用literal_eval模块中的ast函数获得更安全(更受限制)的评估。

在Python 2.x中调用

raw_input()因为它是原始的,而不是“解释”的输入。 input()解释输入,即相当于eval(raw_input())

在Python 3.x中,input()执行raw_input()以前的操作,如果您想要的话,您必须手动评估内容(例如eval(input()))。

答案 3 :(得分:5)

您可以使用.split()

numbers = raw_input().split(",")
print len(numbers)

这仍然会给你字符串,但它将是一个字符串列表。

如果您需要将它们映射到某个类型,请使用list comprehension:

numbers = [int(n, 10) for n in raw_input().split(",")]
print len(numbers)

如果您希望能够输入任何 Python类型并自动映射,您相信您的用户隐含,那么您可以使用eval

答案 4 :(得分:4)

另一种方法可能是使用for循环。 让我们假设您希望用户在名为" memo"的列表中输入10个数字。

memo=[] 
for i in range (10):
    x=int(input("enter no. \n")) 
    memo.insert(i,x)
    i+=1
print(memo) 

答案 5 :(得分:2)

num = int(input('Size of elements : '))
arr = list()

for i in range(num) :
  ele  = int(input())
  arr.append(ele)

print(arr)

答案 6 :(得分:1)

我认为,如果没有第一个答案中提到的split(),就可以这样做。它将适用于所有没有空格的值。因此,您不必像第一个答案那样给空格,我想这更方便。

a = [int(x) for x in input()]
a

这是我的输出:

11111
[1, 1, 1, 1, 1]

答案 7 :(得分:1)

a=[]
b=int(input())
for i in range(b):
    c=int(input())
    a.append(c)

The above code snippets is easy method to get values from the user.

答案 8 :(得分:1)

答案是微不足道的。试试这个。

x=input()

假设[1,3,5,'aA','8as']作为输入

print len(x)

这给出了5的答案

print x[3]

这会给'aA'

答案 9 :(得分:1)

您可以将列表的字符串表示形式传递给json:

import json

str_list = raw_input("Enter in a list: ")
my_list = json.loads(str_list)

用户像在python中一样输入列表:[2, 34, 5.6, 90]

答案 10 :(得分:0)

尝试这个,

n=int(raw_input("Enter length of the list"))
l1=[]
for i in range(n):
    a=raw_input()
    if(a.isdigit()):
        l1.insert(i,float(a)) #statement1
    else:
        l1.insert(i,a)        #statement2

如果列表的元素只是一个数字,则语句1将被执行,如果它是一个字符串,则将执行语句2。最后,您将根据需要获得一个列表l1。

答案 11 :(得分:0)

您可以使用此功能(仅限int类型);)

def raw_inputList(yourComment):
     listSTR=raw_input(yourComment)     
     listSTR =listSTR[1:len(listSTR)-1]
     listT = listSTR.split(",")
     listEnd=[]
     for caseListT in listT:
          listEnd.append(int(caseListT))
     return listEnd

此函数返回列表(使用int类型)!

示例:

yourList=raw_inputList("Enter Your List please :")

如果您输入

"[1,2,3]" 

然后

yourList=[1,2,3]          

答案 12 :(得分:0)

在Python 3中:

R version 3.5.2 (2018-12-20)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252    LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C                            LC_TIME=English_United Kingdom.1252  

它会要求“输入列表”,所以只需输入[2,4,5]之类的列表

input_list = [int(x.strip()) for x in input("enter list:").strip()[1:-1].split(",")]

答案 13 :(得分:0)

我认为这可以完成工作:

val = map(int, input().split()) print(list(val))

答案 14 :(得分:0)

获取用户输入的号码列表。

这可以通过使用python中的列表来完成。

L=list(map(int,input(),split()))

此处 L 表示列表,地图用于映射具有位置的输入, int 指定位于以下位置的用户输入的数据类型整数数据类型, split()用于根据空间拆分数字。

enter image description here

答案 15 :(得分:-1)

k = []
i = int(raw_input('enter the number of values in the list '))
l = 0
while l < i:
    p = raw_input('enter the string ')
    k.append(p)
    l= l+1


print "list is ", k

答案 16 :(得分:-1)

试试这个:

numbers = raw_input()
numberlist = list(numbers)

答案 17 :(得分:-3)

您只需要输入raw_input().split(),默认的split()就是用空格分割值。