我有一个字符串列表:
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] = '.'
答案 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
希望这有帮助!
帕尔默:)