5

我必须以以下格式从用户那里获取输入并从中创建一个嵌套列表。第一行是行数。

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 新手。所以,如果你在我的代码中发现任何其他错误,也请指出。)

4

10 回答 10

9

当您阅读第二行时,您尝试将拆分的行存储到 parentlist[1] 中。但是您的 parentlist 只有一个元素(parentlist[0])。

解决方案是附加列表。

k = int(raw_input())
parentlist = []
for i in range(0, k):
    str1 = raw_input()
    parentlist.append(str1.split())
于 2014-11-07T15:08:39.567 回答
2

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())
于 2014-11-07T15:13:39.033 回答
2

您应该简单地使用list comprehension,因为代码会更短更快。

k = int(raw_input())
l = []
print [raw_input().split() for i in range(0, k)]
于 2014-11-07T15:19:23.197 回答
2

在 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]]
于 2019-01-22T16:01:49.030 回答
1

你很亲密

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代表什么...

于 2014-11-07T15:09:59.537 回答
0

您的 parentlist 的大小[[]]为 1,其中 0 位置为空列表。如果您放入 parentlist k 列表,您的代码将有效:

parentlist = [[]] * k

或者使用 append 代替,但需要append额外查找方法名称。

于 2014-11-07T15:13:56.083 回答
0
l=[]
for _ in range(int(input())):
    name = input()
    score = float(input())
    l.append([name,score])
print(l)
于 2020-05-03T07:55:46.857 回答
0
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)
于 2020-07-21T08:39:31.927 回答
0
k = int(input())
parentlist = [None]*k
for i in range(0, k):
    str1 = input()
    parentlist[i] = str1.split()
print(parentlist)
于 2020-09-18T04:59:21.477 回答
0

你也可以使用这样的东西: -


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

于 2021-09-23T16:56:30.073 回答