Python:在迭代之间改变代码

时间:2013-07-02 10:36:33

标签: python loops syntax iteration

我有一些想要多次运行的代码。这种接缝是微不足道的,但有一个转折点:我想在迭代之间以特定的方式更改代码。例如:

A = 1
B = ['+','-','/'.'*','**']
C = []
for x in range(len(B)):
    C.append(A{B[x]}100)
print(C)

现在,我知道这段代码不起作用,它不是一个合适的Python语法,但我只是一个我想要代码的例子。

理想情况下,我将C作为列表,其中第0个元素是1 + 100,第1个元素是1 - 100,第2个元素是1/100等。(Nb:NOT'1 + 100'字符串。结果为1 + 100计算 - 101)。基本上我希望代码在定义的循环迭代之间自行改变。

我不想定义一些冗长的if / elif语句,因为列表B非常非常长。

编辑:

让我举另一个例子。这个与我的问题更相关。

A = ['mom','dad','me','you','c']
B = ['a','b','something','nothing','cat']
for x in range(len(A)):
    C_{A[x]} = B[x]

我想最终得到5个新变量,以便:

Print(C_mom)
a
Print(C_dad)
b
Print(C_c)
cat

同样,我认识到这不是一个合适的python语法,这段代码不起作用。

1 个答案:

答案 0 :(得分:2)

首先创建一个dict,其中每个字符串'+''*'等指向它从operator模块导入的相应方法。

现在遍历B并从ops dict中获取相应的方法,并将操作数传递给方法。

>>> from operator import add,sub,mul,div,pow
>>> ops = {'+':add,'-':sub,'/':div, '*':mul,'**':pow}
>>> B = ['+','-','/','*','**']
>>> A = 1
>>> [ops[item](A,100) for item in B]
[101, -99, 0, 100, 1]

如果您希望'/': operator.truediv返回ops['/'](1,100)而不是0.01,请使用0

<强>更新

在python中创建动态变量不是一个好主意,你最好在这里使用dict:

>>> A = [1,2,3,4,5]
>>> B = ['a','b','something','nothing','cat']
>>> c = {x:y for x,y in zip(A,B)}
>>> c[1]
'a'
>>> c[2]
'b'
>>> c[5]
'cat

使用globals()创建动态变量(不要使用此方法):

for x,y in zip(A,B):
    globals()['C'+str(x)] =y
...     
>>> C1
'a'
>>> C2
'b'