我在python中有一个列表,我正在搜索第一次出现的值(> = 5000000),但它返回第一个> = 500000。 这里命令:
First_Range_Init_Freq = next(x for x in Freq_Cust if x > '5000000.000')
奇怪的是,如果我用“==”搜索列表中的确切值,它会正常工作,但如果我搜索大于或等于“> =”的东西,则返回错误的值。
有什么想法吗?
答案 0 :(得分:0)
不确定我是否正确理解问题(数据不足) 你想,
int
(> = 5000000)与string
x>进行比较
' 5000000.000' 无论如何,如果它第一次出现你试图找到你可以使用如下的数组索引方法。 (使用样本列表的问题)
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.000'
False
>>> '5000000.000' > '5000000'
True
>>> 5000000 == 5000000.000
True
>>>
文字&#39; 5000000&#39;不是=&#39; 5000000.000&#39; ,int
5000000数是= float 5000000.000。
因此,如果将列表值映射到float,并且使用float进行比较,则会产生正确的结果。
Freq_Cust = [&#39; 4800000&#39;,&#39; 5000000&#39; ,&#39; 5000001&#39;,&#39; 50000010&#39;,&#39; 49000000&#39;,&#39; 500000&#39; ]
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&gt; = 5000000.000或x&gt; = 5000000进行比较。
如果您的列表值是int
部分和部分float
,则可能需要map
到float
作为全能解决方案。