【问题标题】:python multiply list elements in a changing mannerpython以变化的方式将列表元素相乘
【发布时间】:2017-12-03 10:30:03
【问题描述】:

我想衰减列表的元素,使得每 5 个元素,元素将减少一半。例如,长度为 10 的列表将变为:

[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]

[1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0.25,0.25,0.25,0.25,0.25]

我尝试了列表推导和基本的 for 循环,但无法构建其背后的逻辑。

【问题讨论】:

    标签: python list list-comprehension multiplication


    【解决方案1】:

    这是你要找的吗?

    >>> x = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    >>> r = [v*2**(-(i//5)) for i, v in enumerate(x)]
    >>> r
    [1, 1, 1, 1, 1, 0.5, 0.5, 0.5, 0.5, 0.5, 0.25, 0.25, 0.25, 0.25, 0.25]
    >>> 
    

    【讨论】:

    • 非常感谢,它与v*2**(-(i//5)) 合作,将其更改为v/2**(i//5) 使其增加
    【解决方案2】:

    想得简单。

    value = 1
    result = []
    
    for i in range(3):
        for j in range(5):
            result.append(value)
        else:
            value /= 2
    
    print(result)
    # [1, 1, 1, 1, 1, 0.5, 0.5, 0.5, 0.5, 0.5, 0.25, 0.25, 0.25, 0.25, 0.25]
    

    【讨论】:

      【解决方案3】:

      所有其他答案都很好,我想为此添加一个延伸解决方案。

      start_range = 0
      end_range = 5
      num = 1
      
      x = [1 for _ in range(10)]
      res = []
      while start_range <= len(x):
          for item in x[start_range:end_range]:
              res.append(item*num)
          start_range = end_range
          end_range = start_range + 5
          num /= float(2)
      
      print res
      
      # output: [1, 1, 1, 1, 1, 0.5, 0.5, 0.5, 0.5, 0.5]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-25
        • 2017-04-06
        • 2014-02-27
        • 1970-01-01
        • 1970-01-01
        • 2020-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多