2017-03-17 90 views
0

我在python中有一個列表,我正在搜索第一次出現的值(> = 5000000),但它返回第一個> = 500000。 這裏的命令:搜索第一次發生時出錯

First_Range_Init_Freq = next(x for x in Freq_Cust if x > '5000000.000') 

奇怪的是,如果我在列表中搜索的精確值,它工作正常「==」,但如果我搜索更大的東西或等於返回錯誤值「> =」。

任何想法?

+0

您將它與*字符串*進行比較? –

回答

0

不知道我是否正確理解問題(數據不足)。
你想,

  • 1)獲取的值在列表> = 500萬第一次出現?
  • 2)或者它的位置?
  • 3)您已使用string X> 「5000000.000」

反正進行比較的int(> = 5000000),如果它的第一次出現你正在努力尋找可以如以下使用數組索引方法。 (利用問題的一個樣本列表)

Freq_Cust = ['4800000.000', '5000000.000' , '5000001.000', '50000010.000', '4900000.000', '500000.000' ] 

First_Range_Init_Freq = [Freq_Cust.index(x) for x in Freq_Cust if x >= '5000000.000'][0] 
print Freq_Cust[First_Range_Init_Freq] 

結果:

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> ================================ RESTART ================================ 
>>> 
5000000.000 
>>> 

,即可獲得使用它的位置,

>>> print First_Range_Init_Freq 
1 

我假設你用字符串比較字符串或詮釋INT。否則,你需要平衡與正確類型的比較。

讓我知道,如果這不是你在找什麼。並更新問題的更多細節。

EDIT1
根據您的意見。我相信問題在於你將一個數字作爲文本進行比較,因此給出了不正確的結果。

例如,見下文,

>>> '5000000' == '5000000.000' 
False 
>>> '5000000.000' > '5000000' 
True 
>>> 5000000 == 5000000.000 
True 
>>> 

考 '5000000' 不是= '5000000.000',而一個int 5000000號是=浮5000000.000。

因此,如果您將列表值設置爲浮點數,並且使用浮點數進行比較,則會生成正確的結果。

Freq_Cust = [ '4800000', '5000000', '5000001', '50000010', '49000000', '500000']

Freq_Cust = map(float,Freq_Cust) 

First_Range_Init_Freq = [Freq_Cust.index(x) for x in Freq_Cust if x >= float('5000000.000')][0] 
print Freq_Cust[First_Range_Init_Freq] 

>>> 
5000000.0 
>>> 

Ofcourse可以只比較用x> = 5000000.000或x > = 500萬

如果您的列表值部分int和部分float,你可能要mapfloat作爲一個包羅萬象的解決方案。

+0

非常感謝您的幫助! :) 這是我第一次用Python進行編程,這就是爲什麼我面臨這些問題... 我試圖在列表中第一次出現value> = 5000000.000,並且它的位置在列表。 我正在從文件中讀取這些值,並在列表中認爲這些值都是浮點數,但顯然不是。 –

+0

非常感謝您的幫助! :) 這是我第一次用Python進行編程,這就是爲什麼我面臨這些問題... 我試圖在列表中第一次出現value> = 5000000.000,並且它的位置在列表。 我試過了你的建議,但沒有奏效。 我正在從文件中讀取這些值,並在列表中認爲這些值都是浮動的,但顯然不是。我嘗試將它轉換爲float([Freq_Cust]中的[float(Freq_Cust)],它執行該命令,但在鍵入命令「type(Freq_Cust)is float」時返回「False」。 我必須將列表轉換爲浮動嗎? –

+0

看到我對此編輯的回覆 –