python中不规则的累积和

时间:2014-08-20 21:15:44

标签: python sum

我遇到了问题:

我们说我有一个名单:

list_a = ['one', 'two', 'three', 'four', 'etc.']

我有一个初始值:

x = 50

然后我希望list_ax的每个项目for i, v in enumerate(list_a): a = x + 10 * (i + 1) print(a) 增加10,所以我执行:

60, 70, 80, 90, 100, ...

这会产生如下输出:

list_a

但是现在,我想要的是,如果'three'中的任何项目等于x,那么该项目会将60, 70, 120, 130, 140, 150, ... 增加50而不是10,那么结果将是:< / p>

{{1}}

关于如何做到这一点的任何线索??

2 个答案:

答案 0 :(得分:1)

不是使用enumerate并且每次迭代重新计算a,您可能希望将a作为在每次迭代修改的循环之外初始化的单独计数器(递增30)如果值为"three",则为10,否则为:

a = X
for value in list_a:
    if value == "three":
        a += 30
    else:
        a += 10
    print(a)

否则,您必须遍历每次迭代中已访问过的列表的整个部分,以计算等于"three"的元素。

同样,您当然也可以将 值(看到"three"的数量)作为循环外的计数器(而不是a):< / p>

three_counter = 0
for i, v in enumerate(list_a):
    if v == "three":
        three_counter += 1
    # Add 20 for each "three" instead of 30 because the "three"s are also
    # counted in `i`, which adds an additional 10.
    a = X + (i + 1) * 10 + three_counter * 20 
    print(a)

答案 1 :(得分:0)

要添加@hlt的答案,您还可以使用字典存储特殊情况值,然后使用dict.get查找所需的增量值,或者如果没有覆盖则检索默认值是定义。

a = X
default_increment = 10
increment_map = {'three' : 50}
for value in list_a:
    a += increment_map.get(value, default_increment)
    print(a)

if语句适用于单个特殊情况,但如果您开始获得超过2或3个条件,则映射可以帮助您更清楚地阅读。