1

如果向量中的数字小于 4,我试图将 5 添加到该向量。我觉得我很接近,但它运行不正确。谁能给我一些帮助,将 5 添加到向量中小于 4 的任何值?

from pylab import * 
numberlist = [3.2,6,7.8,1,3,2.5]
def x(numberlist):
    for num in numberlist:
        if num > 4:
            print(num)
        else :
            print(num + 5)
print x([3.2,6,7.8,1,3,2.5])
4

4 回答 4

4

怎么样

x = [ v + 5 if v < 4 else v for v in x ]

?

于 2012-10-16T18:59:14.823 回答
2

如果我正确理解 PyLab 的含义,那么您应该有一个可用的 numpy 数组,并且应该避免 for 循环并使用数组操作......

from pylab import * # which should bring numpy ndarray into scope!?
a = ndarray( [3.2,6,7.8,1,3,2.5] )
a[a < 4] += 5.
print a
# [ 8.2  6.   7.8  6.   8.   7.5]
于 2012-10-16T19:14:12.747 回答
2

你所拥有的正是你所描述的。看起来你是 python 的新手,一般来说可能是编程新手。

由于以下原因,代码有点混乱。

  1. 您定义一个名为的全局变量numberlist并为其分配一个数字数组。
  2. 再次x命名您函数的参数。numberlist
  3. 调用时x,您传递一个数组,该数组的值与您在开始时分配给全局变量的值相同numberlist

需要注意的要点:

  • 全局变量numberlistx命名的参数numberlist是两个完全不同的变量。您的效果是numberlist在您的函数内部无法访问全局变量x。您实际上并没有在numberlist任何地方使用全局变量。
  • 如果您想使用全局变量numberlist并将其传递给x,而不是x([3.2,6,7.8,1,3,2.5]),您只需执行x(numberlist).
  • 您应该将xnumberlist参数重命名为其他名称。 mylist例如。
  • 你真的不需要顶部的 import 语句。

考虑到这些,您的代码更具可读性,如下所示:

def x(mylist):
    for num in mylist:
        if num > 4:
            print(num)
        else :
            print(num + 5)
numberlist = [3.2,6,7.8,1,3,2.5]
print x(numberlist)
于 2012-10-16T19:18:45.137 回答
0

在 python 方面无能为力,但在 R 方面这是微不足道的

x <- sample(1:10, 20, rep = T)
> x
 [1]  5  9  1  1  8  9  5 10  2  3  8  1  5  9  7  1  6  2 10  6
 > x[which(x<5)] <- x[which(x<5)] + 5
Arrrr> x
 [1]  5  9  6  6  8  9  5 10  7  8  8  6  5  9  7  6  6  7 10  6
于 2012-10-16T18:59:30.990 回答