[英]Check if item in a Python list is an int/number
我有一个Python脚本,可读取.csv文件并将每个值存储到列表列表中:list [x] [y]。 我对此没有任何问题。
list = []
i = 0
for row in reader:
list.append([])
list[i].append(row[0])
...
i += 1
我想检查这些字段之一,以查看是否为数字(整数)。
当我执行print type(list[i][0])
,即使值是100,它也会返回<type 'str'>
。
下面的if语句在for
循环中遍历列表,因此我想做的是进行检查:
if type(list[i][0] == types.IntType):
True
else:
False
这项工作有效,但是在PEP8中对此并不满意,因此我应该使用isinstance()
,因此我将其修改为
# check if a value is entered
if list[i][0] != '':
if isinstance(int(list[i][0]), int):
True
else:
False
else
False
但是我遇到了尝试将字符串转换为int的问题(如果用户输入了字符串)。
我该如何克服呢? 这似乎是一个简单的问题,但是我是Python的新手,所以我想知道一种简洁有效的处理方式。 在将值存储到列表中之前,是否应该检查该值是否为int?
我正在使用Python2。
谢谢
编辑:我已经将isinstance()
检查包裹在一个try异常捕获周围,但是我觉得我不必不必只是为了检查某物是否为int? 只是好奇是否有更整洁的方法来执行此操作。
编辑:我已经使用isdigit
,如前所述,但是我得到了负面的结果。
即给定此数据集。 列表[0] [0] = 123,列表[1] [0] = asdasd
for i in range(0, 1):
if (list[i][0]).isdigit:
tempInt = list[i][0]
print type(tempInt)
print 'True: ' + tempInt
else:
tempInt = 1
print 'False: ' + tempInt
结果:
<type 'str'>
True: 123
<type 'str'>
True: asdasd
您可以使用它进行检查-这适用于所有数字(正整数和负整数,浮点数,Nan),仅对于int
或某些子类,可能存在更好的方法。
def is_number(a):
# will be True also for 'NaN'
try:
number = float(a)
return True
except ValueError:
return False
从表面上看,它看起来并不好。 但是我认为,如果您想考虑所有数字(负数,浮点数,整数,无穷大等),这可能是最好的方法,您可以在此处看到一个高度查看/投票的问题/答案。 另请注意, isdigit
并非在所有情况下均有效。
以下方法将仅返回整数:
string_list = ['20.0', '100', 'abc', '10.3445', 'adsfasdf.adsfasdf', '10,3445', '34,0']
def check(inp):
try:
inp = inp.replace(',', '.')
num_float = float(inp)
num_int = int(num_float)
return num_int == num_float
except ValueError:
return False
print([check(s) for s in string_list])
给予:
[True, True, False, False, False, False, True]
技巧是先将字符串转换为浮点数,然后将其转换为整数(如果小数部分不为零,则将舍入到浮点数)。 之后,您可以比较输入的整数表示形式和浮点表示形式,以便确定输入是否为整数。 我添加了.replace()
以便支持使用逗号的欧洲和美国/英语十进制表示法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.