2017-03-17 1 views
0

파이썬에 목록이 있고 값의 첫 번째 항목 (> = 5000000)을 검색하고 있지만 첫 번째 항목이> 500000입니다. 여기에 명령을첫 번째 발생을 검색하는 중 오류가 발생했습니다.

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

이상한, 그것은 내가 함께 목록에 정확한 값을 검색하면 "=="잘 작동하지만 내가 더 큰 같거나 뭔가를 검색하는 경우 잘못된 값을 반환합니다 "> =".

아이디어가 있으십니까?

+0

* 문자열 *과 비교합니까? –

답변

0

문제가 올바르게 (불충분 한 데이터인지) 잘 모르는지 확실하지 않습니다.
당신은

  • 1) 목록에서> = 5000000 값의 첫 번째 항목 가져 오기하려고합니까?
  • 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로하는 가정입니다 int. 그렇지 않으면 올바른 유형의 비교를 수행해야합니다.

내가 원하시는 것이 아닌지 알려주십시오. 더 자세한 내용으로 질문을 업데이트하십시오.

EDIT1
귀하의 의견에 따라 문제는 당신이 숫자를 텍스트로 비교하고 잘못된 결과를주는 것이라고 생각합니다.

예 : 원문 '5000000', 아래

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

를 참조하는 것은 = A int 5000000 번호가있는 동안 '5000000.000'= 5000000.000을 떠입니다.

그래서 목록 값을 float에 매핑하고 비교가 float으로 완료되면 올바른 결과가 나타납니다.

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 
>>> 

은 당연히 그냥 x> = 5000000.000 또는 X를 이용하여 비교할 수있다 > = 목록 값이 부분 int 및 부품 float 있습니다 5000000

경우 map을 포괄 솔루션으로 float 할 수 있습니다.

+0

도움 주셔서 대단히 감사합니다! :) 파이썬으로 프로그래밍 할 때 처음입니다. 그래서이 문제에 직면하고 있습니다 ... 목록에서 값> = 5000000.000의 첫 번째 항목을 얻으려고합니다. 그 목록. 나는이 값들을 파일에서 읽으며,이 값들이 모두 수레라고 생각했지만, 분명히 생각하지는 않습니다. –

+0

도움 주셔서 대단히 감사합니다! :) 파이썬으로 프로그래밍 할 때 처음입니다. 그래서이 문제에 직면하고 있습니다 ... 목록에서 값> = 5000000.000의 첫 번째 항목을 얻으려고합니다. 그 목록. 나는 당신의 제안을 시도했으나 효과가 없었습니다. 나는이 값들을 파일에서 읽으며,이 값들은 모두 수레라고 생각했지만, 분명히 생각하지 못했습니다. 나는 그것을 float ([float (Freq_Cust) for Freq_Cust])로 변환하려고 시도했지만 명령을 실행하지만 "type (Freq_Cust) is float"명령을 입력하면 "False"를 반환합니다. 목록을 플로트로 변환해야합니까? –

+0

내 편집 된 내 답변보기 원문보기 : –

관련 문제