Reputation: 439
How would you store a multi-line input into an list?
For example:
3
2 1
1 1 0
2 1 1
4 3 0 1 2
2
1 2
1 3
How would I take that input and store it as a list like so:
examList = [
[3],
[2,1],
[1,1,0],
[2,1,1],
[4,3,0,1,2],
[2],
[1,2],
[1,3]
]
How do you identify the end user input if there any no specific indicators?
Upvotes: 0
Views: 7844
Reputation: 21
You can use sys.stdin.readlines()
.
For example, start with
import sys
user_input = sys.stdin.readlines()
at this point, the value of user_input
should be
['3\n', '2 1\n', '1 1 0\n', '2 1 1\n', '4 3 0 1 2\n', '2\n', '1 2\n', '1 3']
then, you should be able to get your desired output by performing the following processing
examList = []
for input_string in user_input:
examList.append([int(value) for value in input_string.split()])
What we are doing here is iterating through user_input
. For each input_string
, we split()
the words, convert them to int
and put them back into a new list. Then, the new list will be added into examList
.
Upvotes: 2
Reputation: 738
Here's an effective one-liner:
>>> inp = '''3
2 1
1 1 0
2 1 1
4 3 0 1 2
2
1 2
1 3'''
>>> [i.split() for i in inp.split('\n')]
[['3'], ['2', '1'], ['1', '1', '0'], ['2', '1', '1'], ['4', '3', '0', '1', '2'], ['2'], ['1', '2'], ['1', '3']]
Upvotes: 1
Reputation: 20424
Keep calling the input()
function until the line it reads in is empty. The use the .split
method (no args = space as deliminator). Use a list-comp
to convert each string
to an int
and append this to your examList
.
Here's the code:
examList = []
i = input()
while i != '':
examList.append([int(s) for s in i.split()])
i = input()
And with your input, examList
is:
[[3], [2, 1], [1, 1, 0], [2, 1, 1], [4, 3, 0, 1, 2], [2], [1, 2], [1, 3]]
The above method is for Python3
which allows you to call input()
and enter nothing (which is why we use this as a signal to check that we are done - i != ''
).
However, from the docs, we see that, in Python2
, an empty entry to input()
throws an EOF
error. To get around this, I guess we could just make it so that the multi-line input is ended when the string such as: END
is entered. This means that you must stop the entry with a line saying 'END'
:
examList = []
i = raw_input()
while i != 'END':
examList.append([int(s) for s in i.split()])
i = raw_input()
Note that I've used raw_input
as to not perform type conversion.
which works the same as above.
Upvotes: 2