python中的不规则累积和
我遇到了一个问题: 假设我有一张名单:python中的不规则累积和,python,sum,Python,Sum,我遇到了一个问题: 假设我有一张名单: list_a = ['one', 'two', 'three', 'four', 'etc.'] 我有一个初始值: x = 50 然后,我希望列表中的每个项目a的x增加10,因此我执行: for i, v in enumerate(list_a): a = x + 10 * (i + 1) print(a) 这将产生如下输出: 60, 70, 80, 90, 100, ... 但是现在,我想要的是,如果列表a中的任何项目等于'3',
list_a = ['one', 'two', 'three', 'four', 'etc.']
我有一个初始值:
x = 50
然后,我希望列表中的每个项目a
的x
增加10,因此我执行:
for i, v in enumerate(list_a):
a = x + 10 * (i + 1)
print(a)
这将产生如下输出:
60, 70, 80, 90, 100, ...
但是现在,我想要的是,如果列表a
中的任何项目等于'3'
,该项目将x
增加50,而不是10,那么结果将是:
60, 70, 120, 130, 140, 150, ...
关于如何做的任何线索???不要在每次迭代中使用
enumerate
并重新计算a
,您可能希望将a
作为一个单独的计数器在每次迭代修改的循环之外初始化(如果值为“三”
则增加30,否则增加10):
否则,您必须循环遍历在每次迭代中已经访问过的列表的整个部分,以计算等于“三个”
的元素
同样,您当然也可以将该值(看到的“三”
个数)保留为循环外的计数器(而不是a
):
要添加到@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个以上的条件,映射可以帮助你更清楚地阅读。使用if
怎么样?
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)
a = X
default_increment = 10
increment_map = {'three' : 50}
for value in list_a:
a += increment_map.get(value, default_increment)
print(a)