PYTHON - 如何迭代变量列表并根据设置条件更改值?

标签 python python-3.x list variables

我有一个存储变量的列表。这些变量存储 float 。对于我正在制作的程序的一部分,如果一个值末尾有.0,我需要将其删除,如果没有,它可以保持不变。

例如: 2.0将变成2 3.5 仍为 3.5

现在问题出现在程序的后面,我需要对同一组数字进行排序和上下舍入。如果我包含所有关于为什么会这样的推理,那么这个问题就太长了。

我目前的代码如下:

AddRatio=0.35
SubRatio=0.2
MultiRatio=0.2
DiviRatio=0.2
MoneyRatio=0.25

num_add_qs=10*AddRatio
num_sub_qs=10*SubRatio
num_multi_qs=10*MultiRatio
num_divi_qs=10*DiviRatio
num_money_qs=10*MoneyRatio

NumQs = [num_add_qs, num_sub_qs, num_multi_qs, num_divi_qs, num_money_qs]

for i in range(0,len(NumQs)):
    if isinstance(NumQs[i], float) == True:
        NumQs[i]=str(NumQs[i])
        if NumQs[i][2]=="0":
            NumQs[i]=NumQs[i][0:1]
            NumQs[i]=int(NumQs[i])
        else:
            NumQs[i]=float(NumQs[i])
            i=i+1

如果我

print(NumQs) 

返回

[3.5, 2, 2, 2, 2.5]

这就是我想要的结果。

问题是变量的实际值没有改变。 如果我:

print(num_add_qs, num_sub_qs, num_multi_qs, num_divi_qs, num_money_qs)

结果是:

3.5 2.0 2.0 2.0 2.5

如果是整数,则变量需要存储为整数,如果不是 float ,则需要存储为 float 。我将它们转换为字符串纯粹是为了删除相关的 .0。

我哪里出错了?

最佳答案

我需要对您当前的代码进行一些改进:

  • 不要使用 isinstance,而是使用:x == int(x)
  • 永远不要使用大量单独的相似/链接变量,要么将它们全部存储在列表中(就像你一样)并忘记变量,或者更好地使用字典.

因此,采用字典方法,我们得到的是:

AddRatio=0.35
SubRatio=0.2
MultiRatio=0.2
DiviRatio=0.2
MoneyRatio=0.25

num_add_qs=10*AddRatio
num_sub_qs=10*SubRatio
num_multi_qs=10*MultiRatio
num_divi_qs=10*DiviRatio
num_money_qs=10*MoneyRatio

num_dict = {'add': 10*AddRatio, 'sub': 10*SubRatio, 'multi': 10*MultiRatio, \
            'divi': 10*DiviRatio, 'money': 10*MoneyRatio}

num_dict = {k: int(v) if v == int(v) else v for k, v in num_dict.items()}

# --> {'sub': 2, 'multi': 2, 'money': 2.5, 'add': 3.5, 'divi': 2}

因此,为了回答您关于字典理解如何工作的评论,这是我最好的解释 - 通过解释器作为示例胜于 Eloquent :

>>> int(1.0) if 1.0 == int(1.0) else 1.0
1
>>> int(1.6) if 1.6 == int(1.6) else 1.6
1.6
>>> d = {'a': 1.0, 'b': 2.5, 'c': 3}
>>> d.items()
dict_items([('c', 3), ('a', 1.0), ('b', 2.5)])
>>> for k, v in d.items():
...     print("k: {}, v: {}".format(k, v))
... 
k: c, v: 3
k: a, v: 1.0
k: b, v: 2.5
>>> {i: i+2 for i in range(8)}
{0: 2, 1: 3, 2: 4, 3: 5, 4: 6, 5: 7, 6: 8, 7: 9}
>>> {k: int(v) if v == int(v) else v for k, v in d.items()}
{'c': 3, 'a': 1, 'b': 2.5}

关于PYTHON - 如何迭代变量列表并根据设置条件更改值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48240762/

相关文章:

python - 编译 Python 时 --enable-profiling 选项有什么作用?

python - 即使使用当前 python 版本安装 Numpy 导入错误

python-3.x - Lasagne 与 Theano 可能的版本不匹配(Windows)

python - 将整数日期格式转换为人类可读格式

python - 从一个文件执行两个不断重复的脚本

javascript - 如何在 Sencha Touch 中添加数据到列表动态

python - Scrapy 重试或重定向中间件

python - celery 中的递归任务

java - 正则表达式 - 排除名称的单词列表

python - 我使用的列表有误吗?这个简单的 python/pyglet 代码中的内存泄漏