2016-04-11 3 views
-1

Я хочу создать список обеих строк и целых чисел и заставить строки работать как переменные, значение которых является целым числом.Как автоопределить элементы из списка в Python 2.7?

list = ("y","1","x","3") 
str(list[0]) == int(list[1]) 
str(list[2]) == int(list[3]) 

z = x + y 
print(z) 

Я пробовал это, но он все равно не работает. Кто-нибудь знает о возможном решении?

+2

Непонятно, что вы в конечном итоге пытаетесь сделать, но, возможно, вам стоит взглянуть на SymPy? –

ответ

1

Используйте словарь:

data = {"y": 1, "x": 3} 

z = data["y"] + data["x"] 

print(z) # 4 

Также:

list = ("x", "1", "y", "3") 

не создает список, который создает tuple. Кроме того, не используйте имена, такие как list, так как он использует то же имя, что и встроенный list.

+1

+1 но зачем использовать dict.get вместо доступа getitem? Это просто превратит полезный 'KeyError' в менее полезный' TypeError' – wim

+0

@wim, который вы правы. Я привык всегда использовать '.get' со словарем. Для этого примера достаточно получить доступ через '[]'. Я отредактировал его. – idjaw

+0

Я думал об этом, но то, что я пытаюсь сделать, это получить первое из ввода, а словарь - не очень полезная версия. Я объясню реальную цель: когда пользователь записывает ввод типа «y = 3, x = 2». Затем я разделяю детали и делаю операцию (z = 2x - y) и печатаю решение. Проблема в том, что idk, как это сделать ... –

0
In [1]: exec 'y=1+1' 

In [2]: y 
Out[2]: 2 

Излишне говорить о том, что словарь способ лучше, и что вы должны не доверие пользователя при условии ввода, лично я очень препятствовать вам идти по этому пути.

0

Вы можете использовать zip() функции, чтобы получить пар, а затем использовать exec() присвоить целые числа к именам:

>>> items = ("y","1","x","3") 
>>> for i,j in zip(items[0::2], items[1::2]): 
...  exec("{}={}".format(i,j)) 
... 
>>> x+y 
4 

Но обратите внимание, что вы должны быть уверены в идентичности ваших вещей, потому что с помощью exec() мощи причинить вред вашей машине.

Или как более вещий подход можно использовать Dict:

>>> items = ("y","1","x","3") 
>>> the_dict = {i:int(j) for i, j in zip(items[0::2], items[1::2])} 
>>> 
>>> the_dict['x'] + the_dict['y'] 
4 

И в этом случае вы должны быть уверены в типе элементов, поскольку преобразование цифр могут вызвать исключение, если они не являются действительными цифрами ,