在列表中查找整数

时间:2013-08-01 19:00:06

标签: python python-3.x

我有一个这样的列表,名为x(我已经拆分了):

['16','bob','2440', '34']

我想编写一个代码来检查是否有任何数字为负数。我试过的代码不起作用。这就是我的尝试:

for num in x:
    if num < 0:
        print ("Negative number")

4 个答案:

答案 0 :(得分:5)

您的列表仅包含字符串。因此,您应该首先将它们转换为浮点数(或整数,无论​​您需要什么):

a = ['"16','bob','2440', '-2', '34"']
for x in a:
    try:
        if float (x) < 0: print ('negative')
    except: continue

编辑:我将int更改为float,因为OP要求的是数字,而不仅仅是整数。

答案 1 :(得分:3)

您需要先将数字转换为整数;使用谓词函数来尝试这样做:

def negative(string):
    try:
        return int(string.strip('"')) < 0
    except ValueError:
        return False

此处的谓词函数也会删除引号;您的输入列表看起来没有正确清理,您可能希望在测试负值之前首先

然后用它来测试负值:

negative_values = [v for v in a if negative(v)]

或测试是否有任何负值:

if any(negative(v) for v in a):
    print "No negative values please!"

答案 2 :(得分:2)

如何检查项目开头的-符号以及项目的其余部分是否包含数字?单行:

>>> a = ["-1", "aa", "3"]
>>> any(s.startswith('-') and s[1:].isdigit() for s in a)
True

使用any,因为您已经说过want to write a code that checks to see if any of the numbers are negative

注意:如果可能存在负浮动,则只需将s[1:]替换为s[1:].replace(".", "")

希望有所帮助。

答案 3 :(得分:0)

首先,您需要了解“16”和“2440”都不是数字 - 它们是字符串。

其次,你需要弄清楚你想要用'“16”做什么 - 它不代表一个数字,但我认为你想要它。你可以改变这些字符串,但你应该只是使用一个恰当的分裂方法。

那就是说,你可以这样做:

x = ['"16','bob','2440', '34"']

def int_is_negative(s)
    try:    
       return int(s) < 0
    except ValueError:
       return False

is_negative_num = [int_is_negative(s) for s in x]