Python:更改字符串列表中所有元素的格式

时间:2014-06-19 19:54:15

标签: python string

我有一个字符串列表:

a = ['[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]',
     '[2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]',
     '[3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0]',
     '[4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0]',
     '[5.0, 5.0, 5.0]', 
     '[1.0]'
    ]

当我使用下面的代码时,列表中每个元素的格式都是字符串,而不是int。

a= tuple(a.reshape(1,-1)[0])

我需要做的是更改所有元素的格式。如

a[1][2] = 2

但是,在我的代码中:

a[1][2] = '.'

4 个答案:

答案 0 :(得分:4)

a是一个字符串列表。我不知道你从哪里得到它,但据我了解你的问题,你希望它是一个包含数字的列表列表。这可能是eval函数的用例。

>>> a
['[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]', '[2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]', '[3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0]', '[4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0]', '[5.0, 5.0, 5.0]', '[1.0]']
>>> a = [eval(x) for x in a]
>>> a
[[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], [3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0], [4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0], [5.0, 5.0, 5.0], [1.0]]
>>> a[1][2]
2.0

如果您不想使用eval,我建议

a = [[float(x) for x in liststring[1:-1].split(',')] for liststring in a]

答案 1 :(得分:1)

这个怎么样:

>>> a =['[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]', '[2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]','[3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0]','[4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0]','[5.0, 5.0, 5.0]','[1.0]']
>>> a
['[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]', '[2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]', '[3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0]', '[4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0]', '[5.0, 5.0, 5.0]', '[1.0]']
>>> a2 = [eval(l) for l in a]
>>> a2[1][2]
2.0

答案 2 :(得分:1)

您的a是字符串列表,而不是列表列表。它应该是:

a = [[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
[2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0],
[3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0],
[4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0],
[5.0, 5.0, 5.0],
[1.0]]

编辑 - 实际答案:

好的,我现在意识到这对你来说是一个老问题,但我只是遇到了另一个不使用eval()的解决方案(从而避免了安全问题)。您的字符串列表a可以使用json模块解码,然后转换为新的列表列表:

import json

def decodeList(list_of_strings):
    newList = list()
    for i in list_of_strings:
         newList.append(json.loads(i))
    return newList

a = decodeList(a)

print a[1][2]

# outputs 2.0

再次编辑:

哈哈,我只是读完了其余的答案,发现有人已经提供了这个答案!叹。没关系。

答案 3 :(得分:1)

只需使用JSON模块;它是专门为这些工作而制作的。我在下面做了一个例子。它将列表a的所有项(最初是字符串)转换为浮点列表。如果你想将它们转换为整数,只需遍历嵌套列表并制作blahblah = int(blahblah)(请注意,你不要在列表中放入一些不能转换成整数的东西,例如" s")。

from json import loads

a = ['[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]',
 '[2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]',
 '[3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0]',
 '[4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0]',
 '[5.0, 5.0, 5.0]', 
 '[1.0]'
]

for nestlist in range(len(a)):
    a[nestlist] = loads(a[nestlist])

print a

希望这有帮助!
帕尔默:)