【问题标题】:better way to convert list element into a list like this one将列表元素转换为像这样的列表的更好方法
【发布时间】:2026-02-14 09:10:02
【问题描述】:

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

#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 python-3.x python-3.2


    【解决方案1】:

    使用列表推导:

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

    【讨论】:

      【解决方案2】:

      如果使用 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]]
      

      【讨论】:

      • 结果是这个 [, , , ],但谢谢我现在知道该怎么做
      • @Max 您使用的是哪个版本的 Python?您是否在自己的代码中声明了地图类?
      • @Max python 3.x 没有被广泛使用,所以如果你在问题中指定它会更好。
      • @max -- 在 py3k 上,map 返回一个迭代器。您可以使用 list(map(int,x.split(','))) 来获取列表,或者按照其他解决方案中的建议使用 list-comp。
      • @Max 我也添加了兼容 Python 3.x 的答案
      【解决方案3】:
      >>> 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]]
      

      【讨论】:

      • OP 显然在使用 py3k,所以你还需要一个 list
      • @mgilson,切换到列表理解
      • 这里可能是个好主意:-)。 (我和任何人一样喜欢map)。我仍然不确定我是否要对此表示赞成。在这里使用literal_eval 绝对是聪明的,但我认为你不会有太多收获(例如,它将分隔符限制为',',我怀疑它会表现更好)......无论如何,我很高兴你即使我不赞成也发布它,因为它让我很高兴看到一种不同的方式。