Python 将列表元素转换为类似以下列表的更好方法

Python 将列表元素转换为类似以下列表的更好方法,python,python-3.x,python-3.2,Python,Python 3.x,Python 3.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(

我认为这应该很容易,但我真的不知道如何写得更好,如果你知道,请告诉我

#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]]

最好写在一行中,如果使用Python 2.x,请执行以下操作:

points = [map(int, x.split(',')) for x in s]
如果使用Python 3.x,则需要将map()的结果传递给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]]

使用列表理解:

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]]
如果你真的需要列表列表

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

结果是这个[,,],但是谢谢,我知道该怎么做now@Max您使用的是哪个版本的Python?您是否在自己的代码中声明了map类?@Max
Python3.x
没有广泛使用,因此最好在问题中指定它。@Max--在py3k上,map返回一个迭代器。您可以使用
list(map(int,x.split(','))
来获取列表,或者使用另一个解决方案中建议的列表comp。@Max我已经添加了一个与Python 3.x兼容的答案,而且OP显然也在使用py3k,因此您还需要在其中使用
list
。@mgilson,切换到列表理解这里可能是个好主意:-)。(我和任何人一样喜欢地图)。我仍然不确定我是否想投这一票。在这里使用
literal\u eval
确实很聪明,但我认为您并没有获得多少好处(例如,它将分隔符限制为
,'
,我怀疑它的性能会更好)。。。不管怎样,我很高兴你发布了它,即使我没有投票,因为它让我很高兴看到一种不同的方式。
>>> [list(literal_eval(x)) for x in s]
[[3, 4], [4, 5], [6, 5], [7, 8]]