2016-04-11 32 views
-1

Her iki dizenin ve tamsayıların bir listesini oluşturmak ve dizeleri değeri tamsayı sayısı olan değişkenler olarak çalışmak istiyorum.Öğeleri Python 2.7'deki bir listeden nasıl otomatikleştirilir?

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

z = x + y 
print(z) 

Bunu denedim, ancak yine de çalışmıyor. Bunun için herkes olası bir çözümü biliyor mu?

+2

Nihayetinde ne yapmaya çalıştığınız belli değil ama belki SymPy'ye bakmalısınız? –

cevap

1

bir sözlük kullanın: Ayrıca

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

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

print(z) # 4 

:

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

bir tuple yaratan bir liste oluşturmak değil. Ayrıca, list ile aynı adı kullanarak, list gibi adlar kullanmayın.

+1

+1 ancak neden getitem erişimi yerine dict.get kullanıyorsunuz? Bu sadece bir 'KeyError' işlevini daha az kullanışlı bir 'TypeError' – wim

+0

@wim'e dönüştürecektir. Her zaman '.get' kelimesini bir sözlükle alıyorum. Bu örnek için '[] ile erişilmesi yeterli olacaktır. Onu düzenledim. – idjaw

+0

Bunu düşündüm, ama yapmaya çalıştığım şey bir girdiden ilkini almak ve sözlük çok kullanışlı bir sürüm değil. Gerçek amacı açıklayacağım: kullanıcı "y = 3, x = 2" gibi bir girdi yazdığında. Daha sonra parçaları bölüyorum ve (z = 2x - y) gibi bir işlem yapıp çözümü yazdırıyorum. Sorun şu ki, nasıl yapılacağı idil ... –

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

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

Tabii bir sözlük yolu daha iyi olduğunu ve söylemek yapmanız gerekir değil güven kullanıcı tarafından sağlanan girdi, şahsen ben çok bu yolu izlemeye vazgeçirmek.

Sen isimlere tamsayılar atamak için exec() kullanmak sonra çiftleri almak ve zip() işlevini kullanabilirsiniz
0

:

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

Ama siz öğelerin kimliği hakkında emin olmak gerekir unutmayın, exec() kudretini kullanarak, çünkü makinene zarar ver.

Ya bir daha pythonic yaklaşım olarak bir dicti kullanabilirsiniz: bunların geçerli basamak değilse basamak dönüştürme istisna doğurabilir çünkü öğelerin tipinden emin olmak gerek bu durumda yine

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

.