2016-04-11 7 views
-1

Ich möchte eine Liste von Zeichenfolgen und Ganzzahlen erstellen und die Zeichenfolgen als Variablen arbeiten, deren Wert die Ganzzahl ist.Wie können Elemente aus einer Liste in Python 2.7 automatisch definiert werden?

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

z = x + y 
print(z) 

Ich habe das versucht, aber es funktioniert sowieso nicht. Jeder kennt eine mögliche Lösung dafür?

+2

Es ist unklar, was Sie letztlich versuchen, aber vielleicht sollten Sie in SymPy schauen? –

Antwort

1

Verwenden Sie ein Wörterbuch:

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

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

print(z) # 4 

auch:

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

Enthält eine Liste nicht erstellt werden, die eine tuple schafft. Verwenden Sie auch keine Namen wie list, da sie denselben Namen verwenden wie der integrierte list.

+1

+1, aber warum dict.get anstelle von getitem access verwenden? Dies verwandelt einen nützlichen 'KeyError' in einen weniger nützlichen' TypeError' – wim

+0

@wim du recht hast. Ich gewöhne mich daran, '.get' immer mit einem Wörterbuch zu verwenden. Für dieses Beispiel würde der Zugriff über '[]' ausreichen. Ich habe es bearbeitet. – idjaw

+0

Ich dachte darüber nach, aber was ich versuche zu tun, ist das erste von einer Eingabe und ein Wörterbuch ist keine sehr nützliche Version. Ich werde den wahren Zweck erklären: wenn der Benutzer eine Eingabe wie "y = 3, x = 2" schreibt. Dann teile ich die Teile auf und mache eine Operation wie (z = 2x - y) und drucke die Lösung aus. Das Problem ist, dass idk, wie man es macht ... –

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

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

Unnötig zu sagen, dass ein Wörterbuch Weg besser und dass Sie sollten nicht Vertrauen vom Benutzer bereitgestellte Eingabe persönlich ist ich entmutigen sehr, diesen Weg zu verfolgen.

0

Sie zip() Funktion können die Paare bekommen und dann exec() verwenden, um die ganzen Zahlen, Namen zu vergeben:

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

Aber beachten Sie, dass Sie über die Identität Ihrer Artikel sicher sein müssen, denn mit exec() Macht schaden Sie Ihrer Maschine.

Oder als mehr pythonic Ansatz können Sie eine dict verwenden:

>>> 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 

Auch in diesem Fall, dass Sie sicher, dass der Typ der Elemente sein müssen, da die Ziffern konvertieren könnte eine Ausnahme auslösen, wenn sie nicht gültig Ziffern .