2016-07-01 15 views
3

В моей программе, когда я отладки мой код, кажется, где-то в моем коде я произвожуВ чем разница между ['[a, a, a]', '[b, b, b]'] и [[a, a, a], [b, b, b]] в python?

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

и где-то еще я произвожу

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

и когда я хочу, чтобы добавить эти два списка, а затем используйте numpy.array(X1+X2) Я получаю ошибку. Проблема в том, что я не знаю, что не так с моим кодом, поскольку я даже не знаю, в чем разница между этими двумя (например, с цитатой и без цитаты). Если я найду ответ на этот вопрос, тогда я тоже смогу найти свою проблему.

+2

'X1' - это список, в котором есть две строки. 'X2' - это список, в котором есть еще два списка ... По крайней мере, насколько мы можем сказать ... (Вы действительно не сказали нам, что такое' a' и 'b' ...) – mgilson

+2

Цитаты предназначены для создания строк. Это базовый синтаксис Python, и он не отличается от numpy. – Barmar

+0

Вы пробовали печатать 'X1' и' X2'? Я использую диагностические принты все время. А для массивов я также проверяю 'shape' и' dtype'. – hpaulj

ответ

1

Просто рифф прочь @ ответ 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, но это немного сложнее идти в другую сторону.

+0

Сложный способ: '' ['+', '. Join (map (lambda x:' a 'if x == a else' 0 ', [a, a, a])) +'] '', который дает результат как '' [a, a, a] ''. – Rahul

2

X1 представляет собой список, который содержит две строки

X2 представляет собой список, который содержит два списка, каждый из которых содержит три переменные.

О преобразовании строк в список нужно было бы сделать пустой список, а затем удалить квадратные скобки из строк, а затем искать «,» и добавить то, что было найдено до него.

+0

Я помню, где-то я видел, что есть более простой способ сделать это, но я не могу вспомнить, что это было. Python может иметь что-то для этого – HimanAB

+0

Учитывая, что указанные строки имеют имена переменных, вам нужно будет использовать 'eval' для выполнения преобразования, которое обычно не является безопасным или стабильным способом написания кода. Правильное решение заключается не в том, чтобы генерировать эти вещи как строки в первую очередь. – ShadowRanger