2017-05-17 4 views
0

インデックスに私のPythonスクリプトラインで

a=function(i) 

Pythonのリストの中複素数ので結果リストです。このリストには、負の数、正の数、および2つの複素数の4つの値があります。肯定的なものだけが私のために有用であり、私はそれをインデックスにしたい。私はこれをインデックスに書いていますが、うまくいきません。

a=function(i) 
for b in a: 
    if a>0 and type(a)==type(0.1): 
     return a 

どのように対処することができますか?ありがとう。

+0

あなたの関数(i)、それは何を返しますか...そしてbは何ですか? –

+1

なぜ 'a'をif文に入れるのですか?それはリストです。 'b'はリスト項目のようにチェックする必要があります – j2ko

+0

' 3'のような正のint型か、 '3.0'のような正の' float'型か '3 + 0jのような虚数部のない正の複合体'? –

答えて

0

returnは、法外の機能の外に電話しています。

は想定して、リストから正の整数を取得するには、「正」と「負」の数字が floatタイプである:

a = function(i) 

index = None 
for index, v in enumerate(a): 
    if type(v) == float and v >= 0: 
     break 

print(index) 
print(a[index]) 

これは最初の正の実数のインデックスを配置しますindexに登録してください。それは基本的に

、リストの上にこのコードを反復動作し、要素の型をチェックする方法

。要素が実数である場合、その陽性がチェックされます。正の場合、そのインデックスの値はindexになり、ループは停止します。


1:あなたではなく、その後、if v.imag == 0 and v.real >= 0によってif type(v) == float and v >= 0を置き換える "虚部がゼロであるcomplexオブジェクト" を意味する場合。しかし、あなたのコードではtype(a)==type(0.1)と書いてありますので、afloatと予想されます。

+0

まだ動作しません。私はSpyderによって言われました:ローカル変数 'index'は割り当てられていますが使用されていません。私はあなたの助けをもう一度、ありがとう!ありがとう! –

+0

@KensZhengもちろん、私があなたに提案したコードでは 'index'は使用されていません。しかし、それはあなたが探しているインデックスの値を含んでいます。自分自身を説得するために、 'for'ループの後に' index'を表示し、 'a [index]'も表示してください。私はこれを強調するために私の答えを編集しました。また、コードに間違いがありましたので、修正しました。これで、効果的にインデックスを 'index'に置きます。 –

+0

なぜ 'type(v)== int'をテストしていますか? OPはその数が整数であることについて何も言わない。 –

1

私はほぼ正確にこの問題を解決するために持っていたし、何もなかった場合は正の根を見つけ、ValueErrorを送出する機能を書いた:

def find_positive_root(a): 
    for b in a: 
     if type(b) == complex or b<0: 
      continue 
     return b 
    raise ValueError('No positive root in {}'.format(a)) 

このため、専用の機能を書くことの利点は、あなたということですそれをテストすることができます:

In [6]: find_positive_root([-4.3, 2.3j, 3, (-4+8j)]) 
Out[6]: 3 

In [7]: find_positive_root([1., -4j, -2.3, 4j]) 
Out[7]: 1.0 

In [8]: find_positive_root([-1., -4j, -2.3, 4j]) 
    ...: 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-138-a4ed7675f551> in <module>() 
----> 1 find_positive_root([-1., -4j, -2.3, 4j]) 

<ipython-input-132-9cd37f48e3bb> in find_positive_root(a) 
     4    continue 
     5   return b 
----> 6  raise ValueError('No positive root in {}'.format(a)) 

ValueError: No positive root in [-1.0, (-0-4j), -2.3, 4j] 
+0

あなたの答えをありがとう。 –

0

ええ。結局私はそれを試してみました。

a=function(i) 
for v in a: 
    if type(v) is sy.add.Add: 
     pass 
    elif v > 0: 
     return v 
    else: 
     pass 
return v 

注:以下は私のコードで私はsympyとresultlistで複素数を使用して機能(i)を解くsympy.add.Addです。

関連する問題