# Get a list of numbers as input from the user

Posted on

Solving problem is about exposing yourself to as many situations as possible like Get a list of numbers as input from the user and practice these strategies over and over. With time, it becomes second nature and a natural way you approach any problems in general. Big or small, always start with a plan, use other strategies mentioned here till you are confident and ready to code the solution.
In this post, my aim is to share an overview the topic about Get a list of numbers as input from the user, which can be followed any time. Take easy to follow this discuss.

Get a list of numbers as input from the user

I tried to use raw_input() to get a list of numbers, however with the code

numbers = raw_input()
print len(numbers)

the input [1,2,3] gives a result of 7, so I guess it interprets the input as if it were a string. Is there any direct way to make a list out of it? Maybe I could use re.findall to extract the integers, but if possible, I would prefer to use a more Pythonic solution.

In Python 3.x, use this.

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

## Example

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

It is much easier to parse a list of numbers separated by spaces rather than trying to parse Python syntax:

Python 3:

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

Python 2:

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

eval(a_string) evaluates a string as Python code. Obviously this is not particularly safe. You can get safer (more restricted) evaluation by using the literal_eval function from the ast module.

raw_input() is called that in Python 2.x because it gets raw, not “interpreted” input. input() interprets the input, i.e. is equivalent to eval(raw_input()).

In Python 3.x, input() does what raw_input() used to do, and you must evaluate the contents manually if that’s what you want (i.e. eval(input())).

You can use .split()

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

This will still give you strings, but it will be a list of strings.

If you need to map them to a type, use list comprehension:

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

If you want to be able to enter in any Python type and have it mapped automatically and you trust your users IMPLICITLY then you can use eval

Another way could be to use the for-loop for this one.
Let’s say you want user to input 10 numbers into a list named “memo”

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

num = int(input('Size of elements : '))
arr = list()
for i in range(num) :
ele  = int(input())
arr.append(ele)
print(arr)

you can pass a string representation of the list to json:

import json
str_list = raw_input("Enter in a list: ")