我遇到了问题:
我们说我有一个名单:
list_a = ['one', 'two', 'three', 'four', 'etc.']
我有一个初始值:
x = 50
然后我希望list_a
中x
的每个项目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}}
关于如何做到这一点的任何线索??
答案 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个条件,则映射可以帮助您更清楚地阅读。