Как взять Nested List в качестве ввода в Python

Я должен принять входные данные от пользователя в следующем формате и сделать из него вложенный список. Первая строка - это количество строк.

3  
Sourav Das 24 M  
Titan Das 23 M  
Gagan Das 22 F  

Вложенный список должен быть таким:

parentlist = [  
['Sourav', 'Das', '24', 'M']  
['Titan', 'Das', '23', 'M']  
['Gagan', 'Das', '22', 'M']  
]  

Я написал следующий код:

k = int(raw_input())
parentlist = [[]]
for i in range(0, k):
    str1 = raw_input()
    parentlist[i] = str1.split()

Но это дает некоторый индекс вне привязанного исключения после входа во 2-ю строку (как показано ниже). Что не так в коде, для которого он дает это исключение?

3
Sourav Das 24 M
Titan Das 23 M
Traceback (most recent call last):
  File "nested.py", line 5, in <module>
    parentlist[i] = str1.split()
IndexError: list assignment index out of range

(Я новичок в Python. Поэтому укажите и на другие ошибки, если вы найдете их в моем коде.)

10 ответов

Решение

Когда вы читаете вторую строку, вы пытаетесь сохранить разделенную строку в parentlist[1]. Но ваш родительский список имеет только один элемент (paraentlist[0]).

Решение состоит в том, чтобы добавить список.

k = int(raw_input())
parentlist = []
for i in range(0, k):
    str1 = raw_input()
    parentlist.append(str1.split())

В Python 3:

l= [[input(), float(input())] for _ in range(int(input()))]
print l

Входные данные:

5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39

Выход:

[[Harry,37.21],[Berry,37.21],[Tina,37.2],[Akriti,41],[Harsh,39]]

Ваш parentlist список с одним элементом На второй итерации для вашего for цикл, вы пытаетесь получить доступ ко второму элементу parentlist, что вызывает IndexError. Списки в Python работают иначе, чем массивы в JavaScript или PHP.

Что вы действительно хотите сделать, это создать пустой список, а затем добавить к нему результат str1.split().

k = int(raw_input())
parentlist = []
for i in range(0, k):
    str1 = raw_input()
    parentlist.append(str1.split())

Вы должны просто использовать list comprehension так как код будет короче и быстрее.

k = int(raw_input())
l = []
print [raw_input().split() for i in range(0, k)]

Вы были довольно близко

k = int(raw_input())
parentlist = []
for i in range(k):
    str1 = raw_input()
    parentlist.append(str1.split())
  • инициализировать parentlist пустым списком, это важно, потому что позже мы хотим расширить его
    • читать строку ввода
    • разбить строку ввода -> список
    • рассказать родительскому списку append новый список того, что он уже получил

Если вы хотите пойти по неверному пути, вы можете сделать, как ваш код

parentlist = [[]]*k
for i in range(k):
    parentlist[i] = raw_input().split()

Упражнение, найди какой синтаксис [[]]*k обозначает...

scorelist =[] 
n = int(input())
for i in range(n):
    name.append(str(input()))
    score.append(float(input()))

for i in range(n):    
    scorelist.append([name[i],score[i]])

print(scorelist)
l=[]
for _ in range(int(input())):
    name = input()
    score = float(input())
    l.append([name,score])
print(l)

Вы также можете использовать что-то вроде этого: -

      
    k = int(input())
    parentlist = []
    for i in range(k):
        parentlist.append([j for j in input().split()])
    
    print(parentlist)

Размер вашего родительского списка [[]] 1, где на 0 позиции пустой список. Ваш код будет работать, если вы поместите в родительский список k списков:

parentlist = [[]] * k

Или используйте append вместо этого, но с append необходим дополнительный поиск имени метода.

k = int(input())
parentlist = [None]*k
for i in range(0, k):
    str1 = input()
    parentlist[i] = str1.split()
print(parentlist)
Другие вопросы по тегам