在Python中,['[a,a,a]','[b,b,b]']和[[a,a,a],[b,b,b]]有什么区别?

4
在我的程序中,当我调试代码时,似乎在我的代码某个地方生成了 < /p>。
X1=['[a,a,a]','[b,b,b]'] 

还有其他地方我要生成

X2=[[a,a,a],[b,b,b]] 

当我想将这两个列表相加,然后使用numpy.array(X1+X2)时,出现了错误。问题是我不知道我的代码哪里有问题,因为我甚至不知道这两种方式有什么区别(即有引号和没有引号的区别)。如果我找到这个问题的答案,我也就能找到我的问题所在。


2
“X1” 是一个包含两个字符串的列表。“X2”是一个包含两个子列表的列表…至少,就我们目前所知…(您并没有告诉我们 ab 是什么…) - mgilson
2
引号用于创建字符串。这是基本的Python语法,对于numpy也没有任何不同。 - Barmar
你尝试过打印 X1X2 吗?我经常使用诊断打印。对于数组,我还会检查 shapedtype - hpaulj
谢谢。有没有办法将字符串 '[a,a,a]' 转换为列表 [a,a,a]? - HimanAB
我想知道你是否在考虑:np.matrix('1,2;3,4'),这是一种类似于MATLAB语法的快捷方式来创建一个小矩阵。 - hpaulj
显示剩余2条评论
2个回答

3

X1是一个包含两个字符串的列表。

X2是一个包含两个列表的列表,每个列表都包含三个变量。

要将字符串转换为列表,您需要创建一个空列表,然后从字符串中删除方括号,然后查找“,”并将其前面找到的内容添加到列表中。


我记得在某个地方看到过有更简单的方法来做这件事,但我不记得是什么了。Python 可能有相关的解决方案。 - HimanAB
考虑到所涉及的字符串具有命名变量,您需要使用“eval”来执行转换,但这通常不是编写代码的安全或稳定的方式。正确的解决方案不是首先将这些内容生成为字符串。 - ShadowRanger

2

仅仅是针对@JoshuaWierenga的回答进行一点补充:

>>> a, b = 1, 2
>>> X1=['[a,a,a]','[b,b,b]']
>>> X2=[[a,a,a],[b,b,b]]
>>> [eval(i) for i in X1] == X2
True
>>> [str(i) for i in X2] == X1
False
>>> [str(i) for i in X2]
['[1, 1, 1]', '[2, 2, 2]']
>>> a, b = 'a', 'b'
>>> X2=[[a,a,a],[b,b,b]]
>>> [str(i) for i in X2]
["['a', 'a', 'a']", "['b', 'b', 'b']"]

你可以看到X1可以翻译成X2,但是反过来就有些棘手了。

一个巧妙的方法是 '['+','.join(map(lambda x: 'a' if x==a else '0', [a,a,a]))+']',它的输出结果为 '[a,a,a]' - Rahul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接