繁体   English   中英

检查Python列表中的项目是否为int / number

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM