Как взять 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)