我有一个这样的列表,名为 x (我已经拆分):
['16','bob','2440', '34']
我想编写一个代码来检查是否有任何数字为负数。我试过的代码不起作用。这是我尝试过的:
for num in x:
if num < 0:
print ("Negative number")
我有一个这样的列表,名为 x (我已经拆分):
['16','bob','2440', '34']
我想编写一个代码来检查是否有任何数字为负数。我试过的代码不起作用。这是我尝试过的:
for num in x:
if num < 0:
print ("Negative number")
您的列表仅包含字符串。因此,您应该首先将它们转换为浮点数(或整数,无论您需要什么):
a = ['"16','bob','2440', '-2', '34"']
for x in a:
try:
if float (x) < 0: print ('negative')
except: continue
编辑:我更改int
为float
OP 要求数字而不是整数。
你需要先把你的数字变成整数;使用谓词函数尝试执行此操作:
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!"
如何检查-
项目开头的符号以及项目的其余部分是否由数字组成?单线:
>>> 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(".", "")
.
希望有帮助。
首先,您需要了解 '"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]