【问题标题】:How to turn all numbers in a list into their negative counterparts?如何将列表中的所有数字变成负数?
【发布时间】:2014-11-20 15:38:01
【问题描述】:

我正在尝试将正数列表转换为 python 3.3.3 中具有相同值的负数列表

例如将[1,2,3] 变成[-1,-2,-3]

我有这个代码:

xamount=int(input("How much of x is there"))
integeramount=int(input("How much of the integer is there"))
a=1
lista=[]
while(a<=integeramount):
    if(integeramount%a==0):
        lista.extend([a])
    a=a+1
listb=lista
print(listb)
[ -x for x in listb]
print(listb)

当我想要一个是肯定的,一个是否定的时,这会打印两个相同的列表。

【问题讨论】:

  • 按照我在回答中的建议执行listb = [ -x for x in lista ]

标签: python python-3.x list negative-number


【解决方案1】:

最自然的方法是使用列表推导:

mylist = [ 1, 2, 3, -7]
myneglist = [ -x for x in mylist]
print(myneglist)

给予

[-1, -2, -3, 7]

【讨论】:

  • 不幸的是,这在输入到 shell 时有效,但是当放入代码时它不起作用,是否有替代方法?
  • 你错了。在 shell 中工作的所有东西都“在代码中”工作。如果您有一些不起作用并需要帮助的东西,您需要发布代码来显示您正在尝试做的事情。
  • @Anton:不要将&gt;&gt;&gt; 放在代码中。否则,它还必须与你能找到的最古老的 Python 一起工作。唯一的问题可能是它创建了新列表。它不会修改现有的。
  • 感谢@pepr,这是问题所在
  • @pepr,好的,我删除了&gt;&gt;&gt;
【解决方案2】:

如果你想就地修改列表:

mylist = [ 1, 2, 3, -7]
print(mylist)
for i in range(len(mylist)):
    mylist[i] = -mylist[i]
print(mylist)

【讨论】:

    【解决方案3】:

    您可以使用 numpy 包并执行 numpy.negative()

    【讨论】:

      【解决方案4】:

      还有这个方法:

      小提示,这只有在所有数字都以正数开头时才有效。它不会影响 0。如果您有不想更改的负数,则需要在下面添加 IF 语句。

      if num < 0: continue
      numbers = [1, 2, 3, 4 ,5]
      for num in numbers:
          numbers[num-1] = num - (2*num)
      

      numbers
      [-1, -2, -3, -4, -5]
      

      【讨论】:

        【解决方案5】:

        对于大型列表,您可能会更好地使用numpy

        import numpy as np
        
        a=np.array([1,2,3,4])
        
        # result as a numpy array
        b=-a
        
        # can be casted back to list
        c=list(b)
        

        【讨论】:

          【解决方案6】:

          我打算使用 map 提供另一种解决方案:

          >>> from operator import neg
          >>> list(map(neg, data))
          

          虽然我想查看速度与简单理解以及 numpy 的对比,虽然它取决于原生解决方案的列表长度,但 numpy 是处理大型数据集的方式:

          复制情节的代码:

          import perfplot
          import numpy as np
          from operator import neg
          
          def list_comp(data): return [ -x for x in data]
          def map_neg(data): return list(map(neg, data))
          def np_neg(data): return np.negative(data)
          
          perfplot.save(
              "argsort.png",
              setup=lambda n: np.random.rand(n),
              kernels=[list_comp, map_neg, np_neg],
              n_range=[2 ** k for k in range(15)],
              xlabel="len(data)",
          )
          

          【讨论】:

            【解决方案7】:

            使用maplambda 来执行此操作,就像 Python 专业人士一样;)

            mylist = [1, 2, 3, 4, 5]
            mylist = list(map(lambda x: -x, mylist))  # Or "lambda x: x*-1"
            print(mylist)  # [-1, -2, -3, -4, -5]
            

            【讨论】:

              猜你喜欢
              • 2022-11-17
              • 1970-01-01
              • 1970-01-01
              • 2021-04-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-01-19
              相关资源
              最近更新 更多