2017-05-17 118 views
0

複數在我的Python腳本行索引在Python列表

a=function(i) 

所以是一個結果列表。在這個列表中,將會有四個值,一個負數,一個正數和兩個複數。只有積極的一個對我有用,我想索引它。我寫這個索引,但它不起作用

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

所以我該如何解決它。謝謝。

+0

你的功能(一),它返回什麼...什麼是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:如果您頗具意味 「一個complex對象,它的虛部爲零」,然後通過if v.imag == 0 and v.real >= 0更換if type(v) == float and v >= 0。但是,在您的代碼中,您寫了type(a)==type(0.1),所以我認爲a預計爲float

+0

它仍然不起作用。 Spyder告訴我:局部變量'index'被分配給但從未使用過。所以我可以再次幫助你,謝謝! –

+0

@KensZheng當然,我建議給你的代碼中沒有使用'index'。但它包含您正在查找的索引的值。要說服自己,在'for'循環後面打印'index',並打印'[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。