我的任务是:
让L
成为非负整数的列表。编写一个表达式,用L
的多个副本替换0
的最中心元素。请注意,这里的“centermost”定义了奇数长度列表的常用方法,但对于偶数长度列表可能看起来有点不寻常。因此,例如,如果L = [1, 2, 3, 4, 5]
,L
的修改后的值将为[1, 2, 0, 0, 0, 4, 5]
,但如果L = [1, 2, 0, 3]
,修改后的值将为[1, 2, 3]
, 0
- 这里是偶数长度列表的最中心元素 - 将替换为0
的0个副本。
我想出的表达是
L[len(L)/2] = [0] * L[(len(L)/2)]
和L = [1, 2, 3, 4, 5]
的输出是
[1, 2, [0, 0, 0], 4, 5]
我需要消除内部列表元素,使得零是外部列表的一部分。我们被限制在一行而不是/ while循环。
答案 0 :(得分:1)
@saulspatz建议使用切片:
middle = len(L) / 2
L = L[:middle] + ([0] * L[middle]) + L[middle + 1:]
答案 1 :(得分:1)
从Python 2.3开始,可以assign to slices:
>>> L = [1, 2, 3, 4, 5]
>>> L[len(L)//2:len(L)//2 + 1] = [0] * L[(len(L)//2)]
>>> L
[1, 2, 0, 0, 0, 4, 5]
>>> L = [1, 2, 0, 3]
>>> L[len(L)//2:len(L)//2 + 1] = [0] * L[(len(L)//2)]
>>> L
[1, 2, 3]