我必须以以下格式接受用户的输入,并从中生成嵌套列表。第一行是行数。
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()
但在进入第二行后,它给出了一些索引越界异常(如下所示)。它给出此异常的代码中有什么错误?
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的新手。所以如果你在我的代码中发现任何其他错误,也要指出。)
读取第二行时,尝试将拆分的行存储到parentlist[1]中。但是您的parentlist只有一个元素(parentlist[0])。
解决方案是附加列表。
k = int(raw_input())
parentlist = []
for i in range(0, k):
str1 = raw_input()
parentlist.append(str1.split())
您的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)]
在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]]
你非常接近
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
代表什么。。。
父列表[[]]
的大小为1,其中0位置为空列表。如果你把你的代码放在parentlist k列表中,你的代码就可以工作了:
parentlist = [[]] * k
或者使用append,但是对于append
,需要额外查找方法名称。
l=[]
for _ in range(int(input())):
name = input()
score = float(input())
l.append([name,score])
print(l)
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)
k = int(input())
parentlist = [None]*k
for i in range(0, k):
str1 = input()
parentlist[i] = str1.split()
print(parentlist)
您也可以使用类似的东西:-
k = int(input())
parentlist = []
for i in range(k):
parentlist.append([j for j in input().split()])
print(parentlist)