2014-07-26 66 views
0

我在Python中,我從一個文件中讀取的列表:如果我想分配4和11的一些變量如何獲得數字出該字符串列表的蟒蛇

lines = ['4 11', '8 4', '10 5', '15 8', '4 3'] 

。我做了一些事情,如:

a, b = lines[0][0], lines[0][2:] 

現在我需要分配10和5到一些變量,如果我做了一些事情,如:

c, d = lines[2][0], lines[2][2:] 

它提供:

1 
    5 

所以我需要做的:

f, g = lines[0][0:2], lines[0][3] 

得到列表中特定元素的所需結果。

我必須爲任何輸入文件自動執行此過程。我究竟做錯了什麼?任何幫助?

+0

使用'split',而不是'片' - 類似於:'x,y = lines [0 [.split('')' – karthikr

回答

2
In [13]: lines = ['4 11', '8 4', '10 5', '15 8', '4 3'] 

In [14]: [[int(i) for i in line.split()] for line in lines] 
Out[14]: [[4, 11], [8, 4], [10, 5], [15, 8], [4, 3]] 

現在,你可以遍歷新的列表,並指定你想要的任何變量

編輯

如果你想讀的每一對數字只有一次,你可以將列表理解轉換爲一個生成器(只需將外部[]更改爲())。這樣,不是所有的結果都存儲在一個列表,你能訪問它們一次一個:

([int(i) for i in line.split()] for line in lines) 
+0

謝謝!這是工作。我唯一關心的是內存問題,因爲我已經將整個文件讀入列表中,並且[14]也創建了另一個列表,我需要將它放入內存中。我的機器對於較大的文件會不會太多?有什麼解決辦法嗎? – Sohail

+0

@Sohail:檢查編輯 – inspectorG4dget

1

您應該使用split()而不是假設這些數字是哪個字符。

for num_pair in lines: 
    a, b = lines.split() # Splits based on whitespace 
    # Do something with a and b 

split()分隔字符串轉換成基於空白較小的字符串列表,分裂(或者,如果你在一個字符作爲參數傳遞,拆分對字符)。

+0

感謝您的迴應。 – Sohail

0

您可以使用地圖:

lines = ['4 11', '8 4', '10 5', '15 8', '4 3'] 
a,b = map(int,lines[0].split()) 
print a,b 
4 11 
a, b, c, d = map(int,lines[0].split() + lines[2].split()) 
print a,b,c,d 
4 11 10 5