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()
#1
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(l)
print("""in loop""")
for i in l : 
  print(l)

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

[inline]
# input given by user
D 500 W 600
[/inline]

Output:
# 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']
Output:
# 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.
Reply
#2
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

example:
>>> 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']
Reply
#3
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:
Output:
[['D', '500'], ['W', '600'], ['S', '900']]
If there is way for it like how we do normal list input using:
list(input())
Reply
#4
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: https://sourceserver.info
All humans together. We don't need politicians!
Reply
#5
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!!!
Reply
#6
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]):
    result.append(list(pair))
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: https://sourceserver.info
All humans together. We don't need politicians!
Reply
#7
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.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Input function cutting off commands at spaces. throwaway34 3 112 May-12-2021, 06:40 AM
Last Post: throwaway34
  Pie chart from input swar6 1 155 May-04-2021, 03:34 PM
Last Post: Gribouillis
  How to decrease input Yankees1111 2 274 Apr-14-2021, 04:55 PM
Last Post: BashBedlam
  Creating new column with a input string drunkenneo 2 233 Apr-14-2021, 08:10 AM
Last Post: drunkenneo
  How to input & output parameters from command line argument shantanu97 1 209 Apr-13-2021, 02:12 PM
Last Post: Larz60+
  How to make input come after input if certain line inserted and if not runs OtherCode Adrian_L 6 443 Apr-04-2021, 06:10 PM
Last Post: Adrian_L
  Problem restricting user input in my rock paper scissors game ashergreen 6 547 Mar-25-2021, 03:54 AM
Last Post: deanhystad
  Looking for a way to loop until user enters from a list? PythonW19 7 356 Mar-21-2021, 08:56 PM
Last Post: PythonW19
  Python input not working Mar10 4 426 Mar-17-2021, 11:21 AM
Last Post: snippsat
  LinkedList by User Input SantiagoPB 5 711 Mar-03-2021, 09:54 PM
Last Post: deanhystad

Forum Jump:

User Panel Messages

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