您可以將使用zip
功能兩個數組中的元素。
with open("Input.txt") as inf:
for line in inf:
print zip(*map(lambda x: map(int, x.split(":")), line.split()))
輸出
[(1, 2), (0, 120)]
[(1, 2), (1, 131)]
[(1, 2), (2, 26)]
[(1, 2), (3, 568)]
[(1, 2), (4, 176)]
[(1, 2, 3), (5, 28, 549)]
[(1, 2), (6, 17)]
[(1, 2, 3, 4, 5), (7, 6, 217, 401, 636)]
[(1, 2), (8, 139)]
建議: 這是一件好事,有with
關鍵字打開文件,如我在代碼中顯示上方。因爲,它將負責關閉/釋放資源,即使程序因異常而失敗。
說明:
由於zip
是一個函數調用,該參數被首先評估。讓我們稍後來到*
。 map(lambda x: map(int, x.split(":")), line.split())
,我們將lambda函數lambda x: map(int, x.split(":"))
應用於由line.split()
(以空格字符分割句子並返回列表)返回的字符串列表中的每個元素。
每一個分詞都將作爲參數逐個傳遞給lambda函數。如果我們採取第一種情況,首先"1:0"
將發送到lambda函數爲x
,其中我們根據:
分割,這將列出["1", "0"]
,然後我們應用int
函數,它將給出[1, 0]
。因此,在所有行被拆分並應用lambda後,結果將如下所示
[[1, 0], [2, 120]]
[[1, 1], [2, 131]]
[[1, 2], [2, 26]]
[[1, 3], [2, 568]]
[[1, 4], [2, 176]]
[[1, 5], [2, 28], [3, 549]]
[[1, 6], [2, 17]]
[[1, 7], [2, 6], [3, 217], [4, 401], [5, 636]]
[[1, 8], [2, 139]]
現在我們在每個列表中都有兩個元素。還記得*
我們決定以後討論,這將解包列表和所有元素作爲參數傳遞給zip
功能,這樣
zip([1, 0], [2, 120])
現在zip
將選擇所有的第一要素,並把它們放在一個列表,然後它會選擇所有的第二個元素,並將它們放在一個列表中,依此類推。
這就是我們如何得到您所期望的答案。
非常感謝,現在工作正常。我只是python的初學者。您能否給我一個關於zip,* map和lambda的快速評論? – user3041107
@ user3041107請現在檢查已更新的答案。我已經添加了一些解釋。 – thefourtheye
@ user3041107此外,請考慮[接受此答案](http://meta.stackexchange.com/a/5235/235416),如果它可以幫助您 – thefourtheye