1

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

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

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

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

4 回答 4

6

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

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

编辑:我更改intfloatOP 要求数字而不是整数。

于 2013-08-01T19:02:04.177 回答
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!"
于 2013-08-01T19:03:32.293 回答
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(".", "").

希望有帮助。

于 2013-08-01T19:06:13.850 回答
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]
于 2013-08-01T19:07:47.950 回答