【问题标题】:How do I multiply each element in the list by a given number? [duplicate]如何将列表中的每个元素乘以给定的数字? [复制]
【发布时间】:2020-10-20 09:50:36
【问题描述】:

我想将列表中的每个元素乘以给定的数字。

例如,当我在命令提示符下键入以下内容时:

C:\Users\bella\projects\testing1> test.py 5,10,15,20,25,30 2

结果应该是:[10,20,30,40,50,60] (注:每个元素乘以2)

C:\Users\bella\projects\testing1> test.py 5,10,15,20,25,30 0.5

结果应该是:[2.5,5,7.5,10,12.5,15] (注:每个元素乘以0.5)

这是我的代码...

import sys

user_input = sys.argv[1]
u_split = user_input.split(",")
option = sys.argv[2]

n = map(lambda x:x*(option), user_input)
print(n)

这是我在命令提示符下得到的:

C:\Users\bella\projects\testing1> test.py 10,20,30,40,50,60 2
<map object at 0x03588160>

【问题讨论】:

  • list(map(lambda x:x*(option), user_input))
  • map 在 Python2 中返回一个列表,但在 Python3 中返回一个迭代器。您需要将其投射到列表中

标签: python python-3.x python-3.6 python-3.7


【解决方案1】:

您需要先将输入解析为数字。然后,map 是懒惰的 - 你需要一个 list() 来将地图变成一个列表。

import sys

user_input = sys.argv[1]
u_split = user_input.split(",")
option = float(sys.argv[2]) # parse into float

n = list(map(lambda x: float(x)*option, u_split))
print(n)

或者简单地说:

n = [float(x) * option for x in u_split]

【讨论】:

    【解决方案2】:

    解决方案:
    我对你的代码做了一些小的改动,它现在应该可以工作了:

    import sys
    
    user_input = sys.argv[1]
    u_split = [float(n) for n in user_input.split(",")]
    option = float(sys.argv[2])
    
    n = map(lambda x:x*(option), u_split)
    print(list(n))
    

    输出:

    [2.5, 5.0, 7.5, 10.0, 12.5, 15.0]
    

    【讨论】:

    • 既不需要也不推荐使用eval
    • 这就是为什么它在代码中是可选的。如果不需要,他会发表评论。
    • 需要解析输入,只是不使用eval
    • 另外,option 需要是一个数字才能获得预期的答案。
    猜你喜欢
    • 2016-05-12
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多