【问题标题】:Block slicing with step in python在 python 中使用 step 进行块切片
【发布时间】:2020-03-01 23:43:51
【问题描述】:

我想知道是否可以在 python 中对每个第 n 个块进行子索引。是可以做到的

a = [1, 2, 3, 4, 5, 6, 7, 8]
a[::2]

它给出每秒的值

[1, 3, 5, 7]

但是如果我想要类似的东西怎么办:

[1, 2, 5, 6]

所以基本上每个长度为 2 的第二个块。这是否可以通过某种方式进行子索引?

【问题讨论】:

  • 一切皆有可能。你在哪里解决这个问题?
  • 当然可以。但我想知道是否可以使用子索引?

标签: python list slice


【解决方案1】:

你可以这样解决

import itertools
a = [1, 2, 3, 4, 5, 6, 7, 8]
b = list(itertools.chain(*[a[i:i+2] for i in range(0, len(a), 2)][::2]))
assert b == [1,2,5,6]

【讨论】:

    【解决方案2】:

    有趣的问题。

    您可以执行以下操作,但您会丢失数组的顺序

    a[::4] + a[1::4]
    

    输出:

    [1, 5, 2, 6]
    

    使用 numpy,您可以像这样使用模数创建掩码:

    import numpy as np
    mod4 = np.arange(len(a)) % 4
    np.array(a)[(mod4==0) | (mod4==1)]
    

    输出:

    array([1, 2, 5, 6])
    

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 2012-05-21
      • 1970-01-01
      • 2020-08-27
      相关资源
      最近更新 更多