如何在Python中将嵌套列表作为输入

时间:2014-11-07 15:04:09

标签: python python-2.7 user-input nested-lists indexoutofrangeexception

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

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

9 个答案:

答案 0 :(得分:5)

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

解决方案是附加列表。

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

答案 1 :(得分:2)

您的parentlist是一个包含一个元素的列表。在for循环的第二次迭代中,您尝试访问导致IndexError的parentlist的第二个元素。 Python中的列表与例如: JavaScript或PHP中的数组。

你真正想要做的是创建一个空列表,然后将str1.split()的结果附加到它。

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

答案 2 :(得分:1)

你很亲密

k = int(raw_input())
parentlist = []
for i in range(k):
    str1 = raw_input()
    parentlist.append(str1.split())
  • 将parentlist初始化为空列表,这很重要,因为稍后我们要扩展它
    • 读取输入行
    • 拆分输入行 - &gt;一个清单
    • 告诉父母列表append新列表中的内容

如果你想走向糟糕的方向,你可以这样做,类似于你的代码

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

练习,找到[[]]*k代表的语法......

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

在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]]

答案 5 :(得分:0)

您的父母列表[[]]的大小为1,其中0位置为空列表。 如果你输入父列表k列表,你的代码将会起作用:

parentlist = [[]] * k

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

答案 6 :(得分:0)

select
    TOP 1 ItemName
from yourTable
order by
    price desc,
    CalorificValue desc

答案 7 :(得分: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)

答案 8 :(得分:0)

k = int(input())
parentlist = [None]*k
for i in range(0, k):
    str1 = input()
    parentlist[i] = str1.split()
print(parentlist)