【问题标题】:Pythonic way to update a subset of a list with the same value使用相同值更新列表子集的 Pythonic 方法
【发布时间】: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


【解决方案1】:

是的,您可以执行类似的操作,但通过使用右侧的列表对象。例如:

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_listfth 索引中的 k 元素数量将替换为右侧列表中的相应值。

请参阅How assignment works with Python list slice? 了解有关其工作原理的更多详细信息。

【讨论】:

    【解决方案2】:

    是的,这叫做slice assignment。您只需要右侧包含 k 个项目的对象。

    您可以使用迭代器,而不是像Moinuddin's answer 那样制作临时列表。我相信这对于较大的 k 会更有效。这里有两个选项:

    Generator expression

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-21
      • 2023-03-04
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 2018-07-09
      相关资源
      最近更新 更多