Получаем список чисел в качестве входных данных от пользователя

Я пытался использовать raw_input() чтобы получить список чисел, однако с кодом

numbers = raw_input()
print len(numbers)

вход [1,2,3] дает результат 7, Так что я думаю, он интерпретирует ввод как строку. Есть ли какой-то прямой способ сделать из этого список? Может быть, я мог бы использовать re.findall извлечь целых чисел, но если возможно, я предпочел бы использовать более подходящие для Python решение.

16 ответов


В Python 3.Икс, используй это.

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

пример

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

гораздо проще разобрать список чисел, разделенных пробелами, а не пытаться разобрать синтаксис Python:

Python 3:

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

Python 2:

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

eval(a_string) вычисляет строку как код Python. Очевидно, что это не особенно безопасно. Вы можете получить более безопасную (более ограниченную) оценку, используя


можно использовать .split()

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

Это все равно даст вам строки, но это будет список строк.

Если вам нужно сопоставить их с типом, используйте понимание списка:

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

если вы хотите иметь возможность войти в любой Python тип и он отображается автоматически и Вы доверяете своим пользователям неявно затем вы можете использовать eval


другим способом может быть использование for-loop для этого. Предположим, вы хотите, чтобы пользователь ввел 10 чисел в список с именем "memo"

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

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

приведенные выше фрагменты кода-простой способ получить значения от пользователя.


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

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

print(arr)

попробуйте это:

numbers = raw_input()
numberlist = list(numbers)

вы можете передать строковое представление списка в JSON:

import json

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

пользователь входит в список, как и в python:[2, 34, 5.6, 90]


ответ тривиальный. попробовать это.

x=input()

предположим, что [1,3,5,'aA','8as'] задаются в качестве входных данных

print len(x)

это дает ответ 5

print x[3]

это дает 'aA'


вы можете использовать эту функцию (только тип 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]          

это

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 по мере необходимости.


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

вы все еще можете использовать свой код, но вам нужно будет немного его настроить. Вы можете использовать код для python 2.9 или меньше:

number = raw_input()
print number

Если вы используете python 3 или выше, вы можете использовать код:

number = input()
print number

вам просто нужно ввестиraw_input().split() и по умолчанию split () - это то, что значения разделяются пробелами.


попробуй такое

numbers = raw_input()
a = numbers.split(" ")