簡體   English   中英

"如何在 Python 中將嵌套列表作為輸入"

[英]How to take Nested List as input in 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()

但是在進入第二行后它給出了一些索引超出范圍的異常(如下所示)。 給出此異常的代碼有什么問題?

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] 中。 但是你的父列表只有一個元素(父列表[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 初始化為空列表,這很重要,因為稍后我們要擴展它
    • 讀取輸入行
    • 拆分輸入行 -> 列表
    • 告訴 parentlist append新列表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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM