【发布时间】:2021-01-03 18:56:39
【问题描述】:
我正在这样做:
for f in range(n, n + k + 1):
mylist[f] = 0
想知道我是否可以这样做:
mylist[f:f+k] = 0
【问题讨论】:
标签: python python-3.x list
我正在这样做:
for f in range(n, n + k + 1):
mylist[f] = 0
想知道我是否可以这样做:
mylist[f:f+k] = 0
【问题讨论】:
标签: python python-3.x list
是的,您可以执行类似的操作,但通过使用右侧的列表对象。例如:
my_list = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
f, k = 2, 3
my_list[f:f+k] = [0]*k
# ^ List of size "k" i.e. 3
# Updated value of "my_list":
# [1, 1, 0, 0, 0, 1, 1, 1, 1, 1]
在上面的示例中,my_list 中 fth 索引中的 k 元素数量将替换为右侧列表中的相应值。
请参阅How assignment works with Python list slice? 了解有关其工作原理的更多详细信息。
【讨论】:
是的,这叫做slice assignment。您只需要右侧包含 k 个项目的对象。
您可以使用迭代器,而不是像Moinuddin's answer 那样制作临时列表。我相信这对于较大的 k 会更有效。这里有两个选项:
mylist = [100, 101, 102, 103, 104, 105]
f = 2
k = 3
mylist[f:f+k] = ('a' for _ in range(k))
print(mylist) # -> [100, 101, 'a', 'a', 'a', 105]
itertools.repeat()from itertools import repeat
mylist[f:f+k] = repeat('b', k)
print(mylist) # -> [100, 101, 'b', 'b', 'b', 105]
【讨论】: