【问题标题】:Slicing lists for getting just quarter of them in the same length切片列表以获得相同长度的四分之一
【发布时间】:2019-06-08 10:38:34
【问题描述】:

我有一个长度为A 的列表。有没有办法使用切片来获取每四个值但保持它的长度?例如,如果这是我的清单:

A = [0,1,2,3,4,5,6,7,8....]

我想使用切片接收:

A = [0,0,0,0,4,4,...]

使用[::4] 可以获取每四个值,但没有我想要的其他值。

【问题讨论】:

    标签: python list slice


    【解决方案1】:

    如果你有:

    A = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
    

    那么你可以这样做:

    >>> [v for v in A[::4] for _ in range(4)]
    [0, 0, 0, 0, 4, 4, 4, 4, 8, 8, 8, 8, 12, 12, 12, 12]
    >>> 
    

    我应该提到,这会将结果列表的长度四舍五入为 4 的倍数,因此结果中包含的每个值总是为 4。如果您想在末尾删除多余的值,可以在末尾附加 [:len(A)]

    【讨论】:

      【解决方案2】:

      你可以这样做:

      A = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
      repeatedA = [ A[(i//4) * 4 ] for i in range(len(A))]
      

      这里的i//4允许得到索引除以4的商,然后(i//4) * 4允许我们找到最接近4的倍数i小于i,所以这里是1,2 ,3 不是 4 的除数,但 0 是最接近它们的倍数,它与 5,6 和 7 相同,7, 4 是最接近的倍数(因为它应该总是小于它们中的任何一个),它是相当于i - i%4,它允许我们将i向下舍入到最接近的除数4,因为i = 4* (i//4 ) + 4%i

      【讨论】:

      • 答案总是更有帮助,如果它们不仅仅是代码,而是包含一些解释。请你在这里提供一些。
      【解决方案3】:

      如果 A 的元素除以 4 后的索引残差等于 0,则此代码将打印它们。

      如果您需要不同的偏移量,您可以输入 i%4==1 或 2 或 3,而不是 i%4==0

      A = [0,1,2,3,4,5,6,7,8,9,10,11,12]
      print ([A[i] if i%4==0 else 0 for i in range (len(A))])
      
      [0, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 12]
      

      如果您想将每个第四个值重复 4 次,请尝试以下操作:

      print ( [A[i//4*4] for i in range (len(A))])
      
      [0, 0, 0, 0, 4, 4, 4, 4, 8, 8, 8, 8, 12]
      

      【讨论】:

        猜你喜欢
        • 2016-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-01
        • 1970-01-01
        • 2016-08-01
        • 1970-01-01
        • 2020-01-10
        相关资源
        最近更新 更多