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

时间:2016-07-21 06:51:26

标签: python int isinstance

我有一个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使用过,但是我得到了负面结果。

即。给出这个数据集。 list [0] [0] = 123,list [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

2 个答案:

答案 0 :(得分:1)

你可以用它来检查 - 这适用于所有数字(正整数,负整数,浮点数,南数),仅适用于int或某些子类,可能存在更好的方法。

def is_number(a):
    # will be True also for 'NaN'
    try:
        number = float(a)
        return True
    except ValueError:
        return False

面值,看起来不太好。但我认为这可能是最好的方法,如果你想考虑所有数字(负数,浮点数,整数,无穷大等),你可以看到一个高度观点/投票的问题/答案here。另请注意,isdigit并非在所有情况下都有效。

答案 1 :(得分:0)

以下方法仅返回整数:

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()以便使用逗号支持欧洲和美国/英国十进制表示法。