Python 检查并更改多个值

Python 检查并更改多个值,python,Python,大家好,我有个问题 我有三个变量,rF,tF和dF。 现在,这些值的范围从-100到+100。我想检查所有这些,看看它们是否小于1;如果是,则将其设置为1 一个简单的方法就是使用3个if语句,比如 if rF < 1: rF = 1 if tF < 1: tF = 1 if dF < 1: dF = 1 如果射频

大家好,我有个问题

我有三个变量,rF,tF和dF。 现在,这些值的范围从-100到+100。我想检查所有这些,看看它们是否小于1;如果是,则将其设置为1

一个简单的方法就是使用3个if语句,比如

if rF < 1:
    rF = 1
if tF < 1:
    tF = 1
if dF < 1:
    dF = 1
如果射频<1:
rF=1
如果tF<1:
tF=1
如果dF<1:
dF=1
然而,正如你所看到的,这看起来很糟糕,如果我有,比如说其中的50个值,这很容易失控

我试着把它们放在这样的数组中:

for item in [rF, tF, dF]:
if item < 1:
  item = 1
[rF、tF、dF]中项目的
:
如果项目<1:
项目=1
然而,这不起作用。我相信,当你这样做时,你会创建一个完全不同的对象(数组),当你改变项目时,你不是在改变变量本身,而是在改变数组的值


所以我的问题是:做这件事的优雅方式是什么?

如果你只有三个变量需要跟踪,为什么不使用字典呢

rF, tF, dF = 100, -100, 1

d = {'rF': rF, 'tF': tF, 'dF': dF}

for k in d:
    if d[k] < 1:
        d[k] = 1

print(d)
{'rF': 100, 'tF': 1, 'dF': 1}
如果您真的想使用列表,并且您知道列表的顺序,您可以这样做(但字典是为这类问题而设计的):

arr=[rF,tF,dF]
arr=[1如果x<1,则为arr中x的其他x]
打印(arr)
[100, 1, 1]

请注意,列表理解方法实际上不会更改
rF
tF
dF

使用列表理解和
max
函数的值

items = [-32, 0, 43]
items = [max(1, item) for item in items]
rF, tF, dF = items
print(rF, tF, dF)

您只需使用字典,然后将字典解包即可:

d = {'rF': rF, 'tF': tF, 'dF': dF}

for key in d:
    if d[key] < 1:
        d[key] = 1

rF, tF, dF = d['rF'], d['tF'], d['dF']

这正是你想要的:

rF = -3
tF = 9
dF = -2

myenv = locals()

for k in list(myenv.keys()):
    if len(k) == 2 and k[1] == "F":
        myenv[k] = max(1, myenv[k])

print(rF, tF, dF)
# prints 1 9 1
这可能会意外地修改您不想更改的任何变量,因此我建议使用适当的数据结构,而不是黑客攻击用户环境


编辑:修复了
运行时错误:字典在迭代过程中更改了大小
。不能同时迭代和修改词典。通过首先复制字典键,并迭代原始键而不是实际字典来避免这种情况。现在应该可以用Python 2和Python 3了,就像以前的Python 2一样。

如果你打印rF、tF和dF,你可以使用dict作为替代工具,你仍然可以得到100、-100和1。我的意思是我可以把它放在一个列表中——我会试试看,这是真的。使用列表理解方法,您不会更改实际的
rF
tF
dF
变量本身。你必须使用列表吗?说到这件事,字典就是工作马。哈哈哈,谢谢!这看起来很好。这是我一直在寻找的。如果这是令人满意的,请标记为答案,以表明决议。
d = {'rF': rF, 'tF': tF, 'dF': dF}

for key in d:
    if d[key] < 1:
        d[key] = 1

rF, tF, dF = d['rF'], d['tF'], d['dF']
rF, tF, dF = map(d.get, ('rF', 'tF', 'dF'))
rF = -3
tF = 9
dF = -2

myenv = locals()

for k in list(myenv.keys()):
    if len(k) == 2 and k[1] == "F":
        myenv[k] = max(1, myenv[k])

print(rF, tF, dF)
# prints 1 9 1