【问题标题】:Pythonic way to add the same value in a list in one line?在一行中的列表中添加相同值的 Pythonic 方式?
【发布时间】:2019-07-16 16:52:03
【问题描述】:

我想在单行循环中的列表范围内添加数字零。

基本上我想做的是这样,但在一行中:

for position in range(43,53):
    rows[0][position] = 0

我尝试的是这样,但我认为它不正确:

rows[0][0 for position in range(43, 54)]

【问题讨论】:

  • 类似rows[0][43:53] = [0] * (53-43)。这里可能有一些错误...
  • 为什么你认为它是错误的? rows 是什么,你能举个例子吗?你能提供一个你想要的结果的例子吗?为什么需要一行

标签: python list


【解决方案1】:

你可以用切片来做到这一点:

rows[0][43:53] = [0 for i in range(10)]

【讨论】:

  • 或者只是rows[0][43:53] = [0] * 10
  • 或 itertools.repeat 与其他答案一样。使 0 可迭代的多种方法。
  • 对于不可变的值,例如 0,理解通常更安全。
  • @chepner 为什么会这样?
  • @MichaelKolber 试试x = [[3]] * 10,然后设置x[0][0] = 10 看看x 的后记是什么样子的。
【解决方案2】:

这应该可以正常工作。另外看看其他发布的解决方案

rows[0][43:53] = [0] * 10

【讨论】:

    【解决方案3】:

    您可以使用切片分配。 repeat 创建一个必要长度的 0 序列。

    rows[0][43:53] = itertools.repeat(0, 10)
    

    (我主要使用repeat,因为我错误地认为list.__setitem__ 只会尝试消耗尽可能多的元素来填充所需的范围。这似乎是错误的,尽管通常可以实现@ 987654325@ 太懒了,在这种情况下你可以简单地写whatever[43:54] = itertools.repeat(0),你不必预先计算所需的 0 的数量。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 2021-11-26
      • 2021-08-21
      • 2016-05-12
      相关资源
      最近更新 更多