1

ベクトル内の数値が 4 未満の場合、このベクトルに 5 を追加しようとしています。かなり近いように感じますが、正しく実行されていません。ベクトル内の 4 未満の値に 5 を追加するのを手伝ってくれる人はいますか?

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は、2 つのまったく異なる変数です。あなたが持っている効果は、関数内でグローバル変数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 に答える