【问题标题】:Iterative slicing迭代切片
【发布时间】:2022-01-21 21:41:19
【问题描述】:

我是编程初学者,我尝试学习 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)

非常感谢您的帮助!

【问题讨论】:

  • 你能提供示例输入/输出吗?
  • 请发布您的代码,以便我们查看您的尝试
  • 请显示您尝试的 for 循环。
  • 最简单的方法是b = [e for (i, e) in enumerate(a) if (i % 6 < 3)]
  • "我尝试了一个带有 % 条件的 for 循环,但我无法设置规则来获得我想要的东西......" 那么,你能想出一个切片来给你前三个元素吗?下三个?你能看到这些切片的样子吗?例如,如果您使用range 来生成这些切片之间不同的值,然后生成每个切片并将它们放在一起怎么办?

标签: python iteration slice


【解决方案1】:

您可以使用列表推导:

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

【讨论】:

    【解决方案2】:

    你想要这个吗?

    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)
    

    【讨论】:

    • 任何时候你遍历一个列表并追加到另一个空列表,你可能应该使用列表推导。 [x for i in range(0, len(a), 6) for x in a[i:i+3]]
    • 而不是循环切片和扩展:for i in range(0, len(a), 6): b += a[i:i+3]
    【解决方案3】:

    我建议:

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

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

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

    祝你好运!

    【讨论】:

      【解决方案4】:

      使用列表推导和整数运算:

      [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]
      

      【讨论】:

      • 有点脆弱,因为它取决于列表中的项目是否等于它们的索引。
      • 第二个不错,我也想到了;)
      猜你喜欢
      • 2019-07-23
      • 2010-11-23
      • 2023-01-08
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 2015-02-04
      • 1970-01-01
      相关资源
      最近更新 更多