【问题标题】:Multiply elements of a list with natural numbers将列表的元素与自然数相乘
【发布时间】:2018-06-29 10:52:48
【问题描述】:

我有一个如下所示的列表:

l=[0.1,0.5,2.1,3.3]

我想将这些数字中的每一个乘以连续的自然数并从中形成一个列表。例如

newlist=[1*0.1,2*0.5,3*2.1,4*3.3]

我有以下代码:

l=[0.1,0.5,2.1,3.3]
s = np.arange(1,len(l)+1)
np.multiply(l,s)

只是想知道是否有一种方法,无论是内置的还是其他方法,我都不必在其中定义 s。

T 谢谢。

【问题讨论】:

  • 为什么你对你的方法不满意?毕竟只是一个命令!
  • 只要l*s就好了
  • 这怎么能比一个简单的运算符更“内置”?
  • @Tapasya.A 您应该使用该评论更新您的问题(答案是否定的)
  • 您总是必须定义s,但您不必像您正在做的那样明确:l * range(1, len(l) + 1)。只需确保 l 是一个 numpy 数组

标签: python python-3.x list numpy


【解决方案1】:

也许最“原生”的方法是确保 l 是一个 numpy 数组,然后:

import numpy as np

l = np.array([0.1, 0.5, 2.1, 3.3])
print(l * range(1, len(l) + 1))
# array([ 0.1,  1. ,  6.3, 13.2])

【讨论】:

    【解决方案2】:

    您可以使用mapitertools.countoperator.mul

    import operator
    import itertools
    
    l=[0.1,0.5,2.1,3.3]
    res = list(map(operator.mul, l, itertools.count(1)))
    

    这里有一个live example

    【讨论】:

    • 为什么投反对票?
    • 我相信 OP 代码已经有了更好的性能,尤其是对于更长的输入,因为它们利用了 numpy 的矢量化
    • 好吧,OP 可以简单地使用l * s,它仍然是“内置”并且更具性能
    【解决方案3】:

    我认为一个简单的 python 列表理解可以有效地解决您的问题。

    >>> l=[0.1,0.5,2.1,3.3]
    >>> l
    [0.1, 0.5, 2.1, 3.3]
    >>> ll = [item * val for item, val in zip(l, range(1, len(l) + 1))]
    >>> ll
    [0.1, 1.0, 6.300000000000001, 13.2]
    

    【讨论】:

      【解决方案4】:

      可能有很多方法可以做到这一点:

      [a*b for a,b in zip(l,range(1,1+len(l)))]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-01
        • 2017-04-06
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多