![](/img/trans.png)
[英]Most pythonic way to continually iterate over a list until a condition is met?
[英]Most Pythonic way to update variables if condition is met
假设我有一组变量,都需要检查某些条件,如果条件成立,则将其更改。 解决此问题的最Pythonic方法是什么? 下面的代码对于大量变量来说非常冗长。
def addTen(var):
if isinstance(var, int):
var += 10
return var
var1 = 1
var2 = "2"
var3 = 3
var1 = addTen(var1)
var2 = addTen(var2)
var3 = addTen(var3)
print(var1) #prints 11
print(var2) #prints 2
print(var3) #prints 13
通常,您会将它们包装到某种容器中(也许是列表?)...
var = [1, "2", 3]
for i, v in enumerate(var):
var[i] = addTen(v)
当然,通过列表理解,这种情况甚至更容易/更干净,因为该函数非常简单,可以将其写为条件表达式:
var = [1, "2", 3]
var = [v + 10 if isinstance(v, int) else v for v in var]
甚至:
var = [addTen(v) for v in var] # map(addTen, var) works in python2.x, but in python3.x you get an iterator instead of a sequence.
首先,我假设定义了addTen
:
def addTen(var):
if isinstance(var, int):
var += 10
return var
所有这些都假设有多个选项,您会获得一些用于相关变量的容器。
varlst = [1, 2, 3]
if True:
varlst = map(addTen, varlst)
print varlst
要么
if True:
varlst = [addTen(itm) for itm in varlst]
print varlst
vardict = {"var1": 1, "var2": 2, "var3": 3}
if True:
vardict = {key: addTen(val) for key, val in vardict.items()}
print vardict
要么
if True:
for key in vardict:
vardict[key] = addTen(vardict[key])
print vardict
class Container(object):
def __init__(self, var1, var2, var3):
self.var1 = var1
self.var2 = var2
self.var3 = var3
def addTen(self)
self.var1 += 10
self.var2 += 10
self.var3 += 10
def __repr__(self):
templ = "<Container: {self.var1}, {self.var2}, {self.var3}>"
return templ.format(self=self)
container = Container(1, 2, 3)
container.addTen()
print container
使用名称列表:
def addTen(var):
if isinstance(var, int):
var += 10
return var
var1 = 1
var2 = "2"
var3 = 3
for var in [var1, var2, var3]:
print addten(var)
然后,您仍然拥有以后可用的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.