Python Forum
user input for multi-dimentional list without a prior iteration using input()
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
user input for multi-dimentional list without a prior iteration using input()
Hello to my fellow python users,
I am new to python programming and while learning I faced a specific problem which require me to input a multi-dimentional list from user.
I tried using
# input multi-dimensional list from user
l = list(list(input().split())) # this part is not working as I required
print("""in print()""")
print("""in loop""")
for i in l : 

in the hope of inserting multi-dimensional list from the user through input() function but it did't worked.

# input given by user
D 500 W 600

# given output in print() ['D', '500', 'W', '600'] in loop ['D', '500', 'W', '600'] ['D', '500', 'W', '600'] ['D', '500', 'W', '600'] ['D', '500', 'W', '600']
# Expected output in print() [['D', '500'], ['W', '600']] in loop ['D', '500'] ['W', '600']
So, here I am asking my fellow python users to kindly help me with this specific problem if there is a default available because I have tried with row iteration to get the number of rows but that trick is completely separate from what the question generally wants to asks because I already search the google but it didn't give me the required answer. [the number of columns for the inside list is 'n' and the type is <list object>[[<string object>]]]
Kindly, help me to get a solution.
Thank you.
what you have is a double cast, which is the same as a single cast.
that's like saying red, red is the barn colour
and thus both will give you a single dimension list

>>> l = list(list(input().split()))
1 2 3 4 5
>>> l
['1', '2', '3', '4', '5']
>>> l = list(input().split())
1 2 3 4 5
>>> l
['1', '2', '3', '4', '5']
Thank you for your reply.
I know that what I have done but what I am trying to get is a multidimensional list through a one-liner without a prior iteration or in other words from input function something like the following:
If I give input as :
D 500 W 600 S 900
Then, the expected output should be like:
[['D', '500'], ['W', '600'], ['S', '900']]
If there is way for it like how we do normal list input using:
This is not very efficient, but works.
input_list = list(input().split())
result = list(zip(input_list[0::2], input_list[1::2]))
The inner type is a tuple.
My code examples are always for Python >=3.6.0
Almost dead, but too lazy to die:
All humans together. We don't need politicians!
Thank you for your help but is it possible to have inner type also as list? If not then it's okay otherwise your(#DeaD_EyE) answer is fine as I have already tried it in my code and its working. The latter question is for my knowledge.

Thank you all for helping me for my problem.

Thank you!!!
The expectation is, that the user never enters a wrong value or miss a value.
This is also true for the first example I posted.

Inside a list comprehension you can cast a tuple into a list.
By the way, if you don't modify the pairs afterwards, then you don't need to put them into a list.

input_list = list(input().split())
result = [list(pair) for pair in zip(input_list[0::2], input_list[1::2])]
The list comprehension as for-loop:

input_list = list(input().split())
result = []
for pair in zip(input_list[0::2], input_list[1::2]):
I guess the next question is, how to convert the values which are str into int.

input_list = list(input().split())
result = []
for char, value in zip(input_list[0::2], input_list[1::2]):
    result.append([char, int(value)])
If you've more than two fields, there a better method to chunk the data.
The technique is called chunking.

def chunks(iterable, size):
    yield from zip(*[iter(iterable)] * size)

# or if you want lists

def chunks(iterable, size):
    for items in zip(*[iter(iterable)] * size):
        yield list(items)
The package more_itertools have many useful methods.
But first you need to understand Python better.
My code examples are always for Python >=3.6.0
Almost dead, but too lazy to die:
All humans together. We don't need politicians!
Thank you for your help as per my request regarding the question I asked in the previous post and it is very much helpful, I have used your advice in my problem and it really helped me in solving that problem and knowing for solving other problems related to the same.

Thank you #DeadEyE for your help.

Possibly Related Threads…
Thread Author Replies Views Last Post
  Problem with input after function luilong 10 509 Yesterday, 12:16 AM
Last Post: luilong
  Matplotlib - close multple plots with user input Positron79 0 63 Dec-01-2021, 05:26 PM
Last Post: Positron79
  Exit function from nested function based on user input Turtle 5 534 Oct-10-2021, 12:55 AM
Last Post: Turtle
Star I'm getting syntax error while using input function in def. yecktmpmbyrv 1 345 Oct-06-2021, 09:39 AM
Last Post: menator01
  How to include input as part of variable name Mark17 4 613 Oct-01-2021, 06:45 PM
Last Post: Mark17
Exclamation question about input, while loop, then print jamie_01 5 587 Sep-30-2021, 12:46 PM
Last Post: Underscore
  Found input variables with inconsistent numbers of samples: [1000, 200] jenya56 2 362 Sep-15-2021, 12:48 PM
Last Post: jenya56
  [SOLVED] Input parameter: Single file or glob? Winfried 0 321 Sep-10-2021, 11:54 AM
Last Post: Winfried
  input data validation plumberpy 2 521 Aug-11-2021, 12:04 PM
Last Post: plumberpy
Big Grin Newbie to Python - input and branching issue Sherine 3 801 Jul-31-2021, 01:09 AM
Last Post: Pedroski55

Forum Jump:

User Panel Messages

Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020