搜索第一次出现时出错

时间:2017-03-17 15:34:19

标签: python-2.7 list

我在python中有一个列表,我正在搜索第一次出现的值(> = 5000000),但它返回第一个> = 500000。 这里命令:

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

奇怪的是,如果我用“==”搜索列表中的确切值,它会正常工作,但如果我搜索大于或等于“> =”的东西,则返回错误的值。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

不确定我是否正确理解问题(数据不足) 你想,

  • 1)在列表中首次出现值> = 5000000?
  • 2)或者它的位置?
  • 3)您正在将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,则可能需要mapfloat作为全能解决方案。