如何在Python列表中查找小数值的索引
我有一个像下面这样的列表:
['UIS', '', '', '', '', '', '', '', '', '02/05/2014', 'N', '', '', '', '', '9:30:00', '', '', '', '', '', '', '', '', '31.8000', '', '', '', '', '', '', '3591', 'O', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '0']
现在我想知道这个列表中哪个元素是小数,基本上我想找到31.8000
这个值。这样做可以吗?
4 个回答
0
在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让程序能够理解这些数据,我们通常需要将它们转换成一种特定的格式。
比如说,如果你从一个表单获取了用户的输入,这些输入可能是字符串(也就是一串字符),但我们可能需要将它们转换成数字,以便进行计算。这种转换的过程就叫做“数据类型转换”。
在不同的编程语言中,数据类型转换的方式可能会有所不同。有些语言会自动帮你转换,而有些则需要你手动指定。
总之,理解如何处理和转换数据是编程中的一个重要技能,这样才能让你的程序更聪明、更灵活。
data = ['UIS', '', '', '', '', '', '', '', '', '02/05/2014', 'N', '', '', '', '', '9:30:00', '', '', '', '', '', '', '', '', '31.8000', '', '', '', '', '', '', '3591', 'O', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '0']
import decimal
target = decimal.Decimal('31.8000')
def is_target(input):
try:
return decimal.Decimal(input) == target
except decimal.InvalidOperation, e:
pass
output = filter( is_target, data)
print output
0
使用列表推导和正则表达式匹配:
>>> import re
>>> [float(i) for i in x if re.match(r'^[+-]\d+?[.]\d+$',i)]
[31.8]
如果你想跟踪浮点数的索引:
>>> [x.index(i) for i in x if re.match(r'[+-]?\d+?[.]\d+',i)] [24]
1
遍历这个列表,检查一下 float()
函数是否能成功运行:
floatables = []
for i,item in enumerate(data):
try:
float(item)
floatables.append(i)
except ValueError:
pass
print floatables
另外,如果你想要匹配小数的格式,可以使用:
import re
decimals = []
for i,item in enumerate(data):
if re.match("^\d+?\.\d+?$", item) is not None:
decimals.append(i)
print decimals
1
你可以通过直接检查一个变量是不是浮点数来确定它是否包含浮点数,方法是用字面量评估并检查它的类型是否是 float
,像这样
from ast import literal_eval
result = []
for item in data:
temp = ""
try:
temp = literal_eval(item)
except (SyntaxError, ValueError):
pass
if isinstance(temp, float):
result.append(item)
print result
# ['31.8000']
如果你想获取索引,可以像这样对数据使用 enumerate
for idx, item in enumerate(data):
...
...
在准备 result
的时候,记得加上索引,而不是实际的元素
result.append(idx)