迭代切片

Iterative slicing

我是编程初学者,我尝试学习 Python,但我无法设置正确的数据迭代切片。 我有这个:

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
     12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]

我想获得这个,即我将 3 个项目分成大块并删除其中的一半:

a = [0, 1, 2,
     6, 7, 8,
     12, 13, 14, 
     18, 19, 20]

我尝试了一个带有 % 条件的 for 循环,但我无法设置规则来获得我想要的结果...我多年来没有做数学,所以这可能是一个非常愚蠢的逻辑错误...

a = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, 19, 20, 21, 22, 23]

for i in range (len(a)):
    if i==0 : 
        a=a
    elif (i-3)%6 == 0 :
        a[i:i+4]=[]     
    else :
        a=a
        
print(a)

非常感谢您的帮助!

你想要这个吗?

a= [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, 19, 20, 21, 22, 23]
b = []

for i in range(0,len(a),6):
    for j in range(i,i+3):
        b.append(a[j])

print(b)

我建议:

  1. 定义新数组(或列表)
  2. 定义计数器变量和 keepItem 布尔值
  3. 遍历数组并在每一步将计数器加 1
  4. 如果计数器为 3 则将其设置为 0 并翻转布尔值
  5. 如果您的 keepItem 布尔值为真,则将该项目添加到新数组

我建议定义边缘情况。例如,当数组的长度不是 3 的倍数时会发生什么?

这应该是一个很好的起点!

祝你好运!

您可以使用列表理解:

result = [val for i in range(0, len(a), 6) for val in a[i:i+3]]

通过列表理解和整数运算:

[v for v in a if (v // 3) % 2 == 0]

这当然假设您正在处理一个排序列表,其值从 0 到 n,如示例中所示。如果你还想用这个方法,你也可以用enumerate:

[v for i, v in enumerate(a) if (i // 3) % 2 == 0]