2012-09-14 30 views
2

我覺得這應該是很容易的清單,但我真的不知道如何把它寫在一個更好的方式,如果你知道,請告訴我更好的方式列表元素轉換成這樣一個

#there are some points in text files and was read into a list 
s = ['3,4','4,5','6,5','7,8'] 
#break s element to (x,y) form every element should convert to number type 
points = [] 
for pStr in s: 
    ss = pStr.split(',') 
    points.append([int(p) for p in ss]) 
print(points) #[[3, 4], [4, 5], [6, 5], [7, 8]] 

最好寫它一行請

回答

5

如果使用Python 2.x的,你可以做到以下幾點:

points = [map(int, x.split(',')) for x in s] 

如果使用Python 3.x中,你需要通過地圖的結果()到list(),因爲它返回一個迭代器:

points = [list(map(int, x.split(','))) for x in s] 

在行動:

>>> s = ['3,4','4,5','6,5','7,8'] 
>>> points = [map(int, x.split(',')) for x in s] 
>>> print(points) 
[[3, 4], [4, 5], [6, 5], [7, 8]] 
+0

結果是這個[<地圖對象在0x0000000002609EB8>,<地圖對象在0x00000000026105C0>,<地圖對象在0x0000000002610DD8>,<地圖對象在0x0000000002611AC8>],但是現在我知道該怎麼辦 – Max

+0

@Max哪個版本的你在用Python嗎?你有沒有在自己的代碼中聲明一個地圖類? –

+0

我的版本是Python的版本3.2 – Max

6

使用列表理解:

In [19]: s = ['3,4','4,5','6,5','7,8'] 

In [21]: [[int(y) for y in x.split(',')] for x in s] 
Out[21]: [[3, 4], [4, 5], [6, 5], [7, 8]] 
1
>>> s = ['3,4','4,5','6,5','7,8'] 
>>> from ast import literal_eval 
>>> [literal_eval(x) for x in s] 
[(3, 4), (4, 5), (6, 5), (7, 8)] 

如果你真的需要列出的名單

>>> [list(literal_eval(x)) for x in s] 
[[3, 4], [4, 5], [6, 5], [7, 8]] 
+0

OP顯然是使用py3k,所以你還需要一個'list'在那裏。 – mgilson

+0

@mgilson,切換到列表理解 –

+0

這裏大概:-)一個好主意。 (我和任何人一樣喜歡「地圖」)。我仍然不確定是否要加入或不加入。這絕對是聰明在這裏使用'literal_eval',但我不認爲你獲得多少(這限制了分離器是'「」'例如,我懷疑它會表現得更好)......反正,我很高興你發佈了它,即使我不高調,因爲它讓我很高興看到了不同的做法。 – mgilson

相關問題