繁体   English   中英

如果有负值,如何让 python 停止查找?

[英]How to make python stop looking if there is a negative value?

我有一个字典:

ff = {("Tom Brady",45678 ): [[456.0, 4050.0], [0.32, 5.6]]}

f = {("Tom Brady",45678 ): [[456.0, 4050.0, -1000.0], [0.32, 5.6, 4.56]]}

我有这个代码:

def find_neg (client_list: dict[tuple[str, int], list[list[float]]], client: tuple[str, int]) -> int

for a in client_list[client][0]: 
    if a>0:
      return 2
    if a<0
      return 1

这段代码的问题是,当没有负值时,python 给我一个错误,告诉我它不能是 NoneType。 如果有否定,我希望代码给我一个答案,但它只会给我一个错误。

您可以将列表列表(字典中的值)制作成一个大列表,然后使用列表推导创建一个仅包含负数的新列表。 如果此列表理解结果的长度大于 0,则您的字典值中的任何列表中都有负数。

def find_neg (client_list: dict[tuple[str, int], list[list[float]]], client: tuple[str, int]) -> int:
    big_list = sum(client_list[client], [])
    negatives = [i for i in big_list if i < 0]
    if len(negatives) > 0:
        return True
    return False

sum是从列表列表中创建一个列表的小技巧)。

根据评论; 如果您只需要知道是否有负数(并且您永远不需要知道它们是什么数字),您可以简化:

def find_neg (client_list: dict[tuple[str, int], list[list[float]]], client: tuple[str, int]) -> int:
    big_list = sum(client_list[client], [])
    for i in big_list:
        if i < 0:
            return True
    return False

您当前的逻辑是:

def help_find_neg(lst: list[float]):
    for element in lst: 
        if element > 0:
            return 2
        if element < 0:
            return 1
        # and if element == 0: go to the next element

如果您的lst仅包含零,则 function 将跳过所有这些(并返回None )。

这可能是您的NoneType错误背后的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM