python:将2维字符串列表转换为float

时间:2013-04-14 07:01:10

标签: python multidimensional-array

我有一个2维类型字符串列表我试图将其转换为int。到目前为止我尝试过的事情:

[[float(i) for i in lst[j] for j in lst]

带有for循环:

for i in range(len(lst)):
    for j in range(len(lst[i])):
         lst[i][j]=float(lst[i][j])

6 个答案:

答案 0 :(得分:7)

>>> nums = [['4.58416458379', '3.40522046551', '1.68991195077'], ['3.61503670628', '5.64553650642', '1.39648965337'], ['8.02595866276', '8.42455003038', '7.93340754534']]
>>> [[float(y) for y in x] for x in nums]
[[4.58416458379, 3.40522046551, 1.68991195077], [3.61503670628, 5.64553650642, 1.39648965337], [8.02595866276, 8.42455003038, 7.93340754534]]

我不确定你的意图是什么,但是因为你声称for循环版本不起作用,也许你想要一维结果,在这种情况下:

>>> [float(y) for x in nums for y in x]
[4.58416458379, 3.40522046551, 1.68991195077, 3.61503670628, 5.64553650642, 1.39648965337, 8.02595866276, 8.42455003038, 7.93340754534]

答案 1 :(得分:3)

您的两种解决方案都接近正常。实际上,第二个应该已经有效,尽管它可能会有所改善。

以下是我更新列表理解版本的方法。这个版本的(可能是可疑的)优点是它创建了一个包含浮点数的新嵌套列表,并保留了原始嵌套的字符串列表(如果需要,可以将其用于其他内容):

new_lst = [[float(string) for string in inner] for inner in lst]

以下是我更新for循环代码的方法。与使用列表推导的版本不同,此代码修改了原始列表列表的内容。虽然您当前的代码应该可以正常工作,但我认为下面的版本更加“pythonic”,因为它迭代了列表的内容,而不是迭代范围并索引列表。索引只需要赋值,我们使用enumerate内置函数获取索引和字符串:

for inner in lst:
    for index, string in enumerate(inner):
        inner[index] = float(string)

答案 2 :(得分:2)

使用map(),这是一个简化示例

nums = [['4.58416458379','1.68991195077'], ['8.02595866276'],
    ['3.61503670628', '5.64553650642', '1.39648965337']]

def myFloat(myList):
    return map(float, myList)

map(myFloat, nums)

答案 3 :(得分:1)

newList = []
listSize = len(oldList)
for i in range(0, listSize):
    newList.append([])
    for j in range(0, 2):
        newList[i].append(float(oldData[i][j]))

这对我有帮助,这会创建一个名为 newList 的新列表,并输入从 oldList newList 的所有元素。虽然 newList 初始化为一维数组,但第4行根据要转换数组的任何维度添加新维度。

答案 4 :(得分:-2)

纠正您的第一个解决方案:

>>> sss = [['4.584','1.689'],['8.025'],['3.615','5.645','1.396']]
>>> fff = [float(s) for ss in sss for s in ss]      #notice the order of loops
>>> fff
[4.584, 1.689, 8.025, 3.615, 5.645, 1.396]

它有效。

答案 5 :(得分:-3)

您可以使用

>>> lst = lst.astype(str)