我有一个这样的列表,名为x(我已经拆分了):
['16','bob','2440', '34']
我想编写一个代码来检查是否有任何数字为负数。我试过的代码不起作用。这就是我的尝试:
for num in x:
if num < 0:
print ("Negative number")
答案 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]