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

2024-10-01 15:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个存储变量的列表。这些变量存储浮点数。对于我正在制作的程序的一部分,如果一个值的末尾有.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

如果我

^{pr2}$

它回来了

[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

如果是整数,则变量需要存储为整数;如果不是整型,则需要浮点。我将它们转换为字符串,纯粹是为了删除.0(如果相关)。在

我哪里出错了?在


Tags: 程序addiffloatmultinummoneyqs
2条回答

当您用这些变量初始化列表时,您正在生成一个列表,其中包含这些变量中值的副本。从这一点开始,存在两组完全独立的值:分配给原始变量的值,如AddRatio和{},以及列表中的值。在

基本上,如果你想改变这些变量的值,你需要改变这些变量的值。更改列表只会更改列表中包含的值。如果我写下:

val1 = 1
val2 = 2
list = [val1, val2]

我得到了一份清单如下:

^{pr2}$

这个列表现在是一个完全独立的对象,它有自己的1和{},如果你愿意的话。即使我这样改变val

val1 = 4

我的名单仍然是:

^{pr2}$

相反,即使我更改索引0处的列表,val1也不会更改。在

也就是说,这种行为只适用于Python中的基元/不可变类型,比如ints或lambdas。如果你开始复制复杂的对象,你会遇到“深”和“浅”复制的问题(见here)。要理解的重要一点是,基本体是“通过复制传递”,而对象是“通过引用传递”。这种差异很好地解释了here。在

对于您当前的代码,我有几点需要改进:

  • 不要使用isinstance,而是使用:x == int(x)。在
  • 不要使用大量单独的相似/链接变量,要么将它们全部存储在一个list(如你所见),然后忘掉这些变量,或者最好使用一个dictionary。在

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

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}

因此,为了回答你对词典理解如何工作的评论,我最好的解释是——通过翻译,作为例子,多说单词:

^{pr2}$

相关问题 更多 >

    热门问题