【问题标题】:what is the difference between ['[a,a,a]','[b,b,b]'] and [[a,a,a],[b,b,b]] in python?python中的 ['[a,a,a]','[b,b,b]'] 和 [[a,a,a],[b,b,b]] 有什么区别?
【发布时间】:2023-04-27 22:28:01
【问题描述】:

在我的程序中,当我调试我的代码时,它似乎在我生成的代码中的某个地方

X1=['[a,a,a]','[b,b,b]'] 

我在其他地方生成

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

当我想添加这两个列表然后使用numpy.array(X1+X2) 时出现错误。问题是我不知道我的代码有什么问题,因为我什至不知道这两者之间有什么区别(即带引号和不带引号)。如果我找到了这个问题的答案,那么我也可以找到我的问题。

【问题讨论】:

  • X1 是一个包含 2 个字符串的列表。 X2 是一个列表,其中还有两个列表...至少,据我们所知...(您还没有真正告诉我们ab 是什么...)
  • 引号用于制作字符串。这是基本的 Python 语法,与 numpy 没有什么不同。
  • 您是否尝试过打印X1X2?我一直使用诊断打印。对于数组,我还检查了shapedtype
  • 谢谢。有没有办法可以将字符串 '[a,a,a]' 转换为列表 [a,a,a] ?
  • 在我的程序中,当我调试我的代码时,似乎在我的代码中某处生成了X1=['[a,a,a]','[b,b,b]'] 好吧,也许你做错了什么,但既然你'只显示了您的输出,而不是产生这些输出的代码,很难提供帮助...

标签: python list numpy


【解决方案1】:

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

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

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

【讨论】:

  • 我记得在某处我看到有一种更简单的方法可以做到这一点,但我不记得是什么了。 Python 可能对此有所帮助
  • 鉴于有问题的字符串具有命名变量,您需要使用eval 来执行转换,这通常不是一种安全或稳定的代码编写方式。正确的解决方案是首先不要将这些东西生成为字符串。
【解决方案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]'
最近更新 更多