我有一個包含數字矩陣的文本文件閱讀:從文本文件蟒蛇
999 999 10 8
3 4 999 999 999
6 999 2 7 999
999 6 3 5 6
999 9 1 10 999
10 6 999 2 2 999
我想讀的每一行,並將其存儲在Python的數組,但 我有將每個值從string
更改爲int
時遇到問題。我在解析每行時嘗試使用int()
,但我得到了無法將list
傳入int()參數的錯誤。
我有一個包含數字矩陣的文本文件閱讀:從文本文件蟒蛇
999 999 10 8
3 4 999 999 999
6 999 2 7 999
999 6 3 5 6
999 9 1 10 999
10 6 999 2 2 999
我想讀的每一行,並將其存儲在Python的數組,但 我有將每個值從string
更改爲int
時遇到問題。我在解析每行時嘗試使用int()
,但我得到了無法將list
傳入int()參數的錯誤。
嘗試:
matrix = [[int(i) for i in line.split()] for line in open('myfile.txt')]
[編輯] 如果你不想在第一線做之前閱讀。
with open('myfile') as f:
f.readline()
matrix = ....
readlines是不必要的。 – 2011-05-31 02:50:26
是的,這似乎工作良好,但我Forogot提及我不想讀的txt文件的第一行,任何想法? – NewbieCoder 2011-05-31 02:53:28
@Rafe凱特勒確實 – JBernardo 2011-05-31 02:54:13
nums = []
with open('file.txt') as f:
for line in f:
nums.append([int(n) for n in line.split()])
你可以寫爲一個列表理解,但這種情況可能變得骯髒。
列表理解爲什麼能拿討厭下面列出灰色複選標記接受? – 2011-05-31 02:51:15
@Mike看到其他答案。嵌套列表理解很少是很好的形式;上面的那個可能是最簡潔的,但它太長和密集。 – 2011-05-31 02:52:28
列表解析速度快且不太冗長。如果在理解中打開,CPython的gc會關閉該文件。 – JBernardo 2011-05-31 02:59:55
對於每一行,分割空間的字符,然後每個令牌轉換爲int。一種方式做到這一點,使用列表理解,就是:
s = "999 999 10 8"
[int(t) for t in s.split(" ")]
#evaluates to [999, 999, 10, 8]
考慮換行時不起作用。 – 2011-05-31 02:52:29
分每默認 – 2011-05-31 08:25:00
使用map()
得到list
的list
S:
>>> with open('myfile.txt') as matrix:
... [map(int, line.split()) for line in matrix]
...
[[999, 999, 10, 8], [3, 4, 999, 999, 999], [6, 999, 2, 7, 999], [999, 6, 3, 5, 6], [999, 9, 1, 10, 999], [10, 6, 999, 2, 2, 999]]
空格分割爲什麼'map'在列表解析裏,如果'map'做同樣的事情'[F(X)爲X的迭代]'? – JBernardo 2011-05-31 03:05:24
@JBernardo,'map()'消除了你在答案中使用的內部for循環 – 2011-05-31 03:10:39
添加代碼的樣本。 – monkut 2011-05-31 02:46:54