>我有一个列表
w = [1, 1, 1, 1, 1, 1, 1, 1, 1]
我需要我的输出是这样的:
w = [1, 4, 2, 4, 2, 4, 2, 4, 1]
我知道常规方法,即 for 循环。有人可以告诉我如何使用切片完成此操作吗?任何帮助将不胜感激。
对于循环:
for i in range(1, (len(w) -1):
if i%2 == 0:
w[i] = 4
else:
w[i] = 2
您可以像这样替换元素:
w[2:-1:2] = [2]*len(w[2:-1:2]) # replace 3rd, 5th, 7th and so on... element with 2
w[1:-1:2] = [4]*len(w[1:-1:2]) # replace 2nd, 4th, 6th and so on... element with 3
编辑:
我没有提到
3,5,7等不会影响第一个,第二个和最后一个元素,因为的 [2:-1
和
2,4,6 不会因为 [1:-1,
和
步长为 2,因为 :2]
这是一个如此奇怪的请求,但你来了:
w = w[0]] + [4 if i%2 == 0 else 2 for i in range(1, (len(w) -1))] + [w[-1]]
通常,每个循环都可以通过这种方式转换为列表推导,但在这样的情况下,将其保留为循环可能更具可读性。
编辑:您还可以将range
函数替换为元素枚举以获取索引,并忽略实际元素,如下所示(注意我也反转了条件,因为新的切片将索引移动了一个):
[w[0]] + [4 if i%2 else 2 for i, _ in enumerate(w[1:-1])] + [w[-1]]