0

我有一个 Python 脚本,它读取 .csv 文件并将每个值存储到列表列表中:list[x][y]。我对此没有任何问题。

list = []
i = 0

for row in reader:
     list.append([])
     list[i].append(row[0])
     ...
     i += 1

我想检查这些字段之一,看看它是否是一个数字(整数)。

当我执行 a时,即使值是 100,print type(list[i][0])它也会返回 a 。<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()围绕一个尝试异常捕获进行了检查,但是我觉得我不应该仅仅为了检查某个东西是否是 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
4

2 回答 2

1

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

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

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

于 2016-07-21T06:55:31.753 回答
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()了为了支持使用逗号的欧洲和美国/英国十进制表示法。

于 2016-07-21T11:23:21.873 回答