Получить список чисел в качестве ввода от пользователя - PullRequest
48 голосов
/ 12 января 2011

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

numbers = raw_input()
print len(numbers)

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

Ответы [ 15 ]

75 голосов
/ 27 января 2015

В 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]
>>> 
57 голосов
/ 12 января 2011

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

Python 3:

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

Python 2:

s = raw_input()
numbers = map(int, s.split())
6 голосов
/ 12 января 2011

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

raw_input() вызывается так в Python 2.x, потому что он получает необработанный, а не "интерпретируемый" ввод. input() интерпретирует ввод, т. Е. Эквивалентно eval(raw_input()).

В Python 3.x input() делает то, что делал raw_input(), и вы должны оценить содержимое вручную, если это то, что вам нужно (т.е. eval(input())).

5 голосов
/ 12 января 2011

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

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

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

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

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

Если вы хотите иметь возможность вводить любой тип Python и автоматически сопоставлять его и , вы доверяете своим пользователям НЕПРАВИЛЬНО тогда вы можете использовать eval

4 голосов
/ 25 июля 2016

Другим способом может быть использование цикла for для этого.Допустим, вы хотите, чтобы пользователь ввел 10 чисел в список с именем «memo»

memo=[] 
for i in range (10):
    x=int(input("enter no. \n")) 
    memo.insert(i,x)
    i+=1
print(memo) 
3 голосов
/ 25 декабря 2017
num = int(input('Size of elements : '))
arr = list()

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

print(arr)
1 голос
/ 05 августа 2017
a=[]
b=int(input())
for i in range(b):
    c=int(input())
    a.append(c)

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

1 голос
/ 19 апреля 2014

Ответ тривиален. попробуйте это.

x=input()

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

print len(x)

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

print x[3]

это дает 'aA'

1 голос
/ 07 апреля 2013

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

import json

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

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

0 голосов
/ 05 апреля 2019

В Python 3:

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

Он попросит «войти в список», поэтому просто введите список, как [2,4,5]

(common_py3) PS E:\virtual_env_all\common_py3\Scripts> python
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> input_list = [int(x.strip()) for x in input("enter list:").strip()[1:-1].split(",")]
enter list:[2,4,5]
>>> input_list
[2, 4, 5]
>>> type(input_list)
<class 'list'>
>>>
...