如何从列表末尾开始每隔一个元素将其值乘以2?
解决列表从末尾步长-2元素乘2的问题
需求说明
从列表末尾开始,以步长-2选取元素并将其乘以2。示例:
a = [1, 2, 3, 4, 5, 6, 7] # 期望得到结果 a = [2, 2, 6, 4, 10, 6, 14]
问题代码
用户尝试了两种方法但未达到预期效果:
a = [1, 2, 3, 4, 5, 6, 7] a = [i*2 for i in a[-1::-2]] print(a) # or a = [1, 2, 3, 4, 5, 6, 7] for i in a[-1::-2]: i *= 2 # 返回结果仅为 14, 10, 6, 2
问题分析
- 第一种方法:列表推导式直接生成了仅包含目标元素乘2的新列表,丢失了原列表中其他位置的元素,不符合需求。
- 第二种方法:遍历的
i是原列表元素的副本,修改i不会对原列表产生任何影响,所以原列表没有变化。
解决方案
方法一:通过索引直接修改原列表
直接遍历目标位置的索引,对原列表对应位置的元素进行修改:
a = [1, 2, 3, 4, 5, 6, 7] # 生成从末尾开始、步长-2的索引序列 for idx in range(len(a)-1, -1, -2): a[idx] *= 2 print(a) # 输出: [2, 2, 6, 4, 10, 6, 14]
方法二:列表推导式保留原结构
利用枚举获取索引和元素,判断索引是否属于目标位置,再决定是否乘2:
a = [1, 2, 3, 4, 5, 6, 7] # 目标索引的奇偶性与最后一个元素索引一致(列表长度为7时,最后索引是6,偶数) a = [num * 2 if idx % 2 == (len(a)-1) % 2 else num for idx, num in enumerate(a)] print(a) # 输出: [2, 2, 6, 4, 10, 6, 14]
内容的提问来源于stack exchange,提问作者Stergios Katseas
相关产品推荐
相关产品推荐

