Python:返回 None 而不是 False

时间:2021-06-03 11:39:29

标签: python list

以下代码返回 None 而不是 False。请帮我理解原因。

def same_first_last(nums):
    for i in nums:
        if nums[0] == nums[-1] and len(nums) >= 1:
            return True
        else:
            return False


print(same_first_last([]))

感谢任何帮助!!!

3 个答案:

答案 0 :(得分:1)

根据您的问题有两种情况:-

  1. nums 的大小 > 0:

    如果 nums 列表不为空,那么它要么满足您的 if 条件,即 nums[0] == nums[-1] and len(nums) >= 1 在这种情况下它将返回 True 否则它将返回 { {1}}

  2. False 的大小 == 0

    如果是这种情况,那么代码甚至不会进入 nums 循环内部,在这种情况下,它将无法进入 for 块内部,这就是为什么 python 返回 {{1}默认情况下,因此您的代码也返回 None。

    为避免这种情况,您可以更改如下代码:-(您甚至不需要进入 for 循环,因为您的 if else 条件是静态的,即不随迭代器 None 从您问题的 if else 循环。

i

在上面的 for 中,它是两个条件 def same_first_last(nums): return nums and nums[0] == nums[-1] print(same_first_last([])) return nums and nums[0] == nums[-1] 的连接

a) if nums 正在检查您正在迭代的列表或字符串是否为空。如果为空则返回 if nums[0] == nums[-1] else if nums

b) False: - 它正在检查您问题中的条件(检查前面的元素和最后一个元素是否相等)

当以上两个条件都满足时,则只返回True,否则返回False

答案 1 :(得分:0)

由于您使用空列表调用方法,因此您永远不会在方法中进入 for 循环,因此您永远无法到达 return 语句。当您使用空列表调用您的方法时,您的 for 循环将被完全跳过。你可以像这样改变你的方法:

def same_first_last(nums): 
    for i in nums: 
        if nums[0] == nums[-1] and len(nums) >= 1: 
            return True
        else:
            return False
    return <enter default value here>

但您甚至不需要循环,因此您可以进一步简化代码:

def same_first_last(nums): 
    if len(nums) > 0: 
        return nums[0] == nums[-1]
    else:
        return False

答案 2 :(得分:0)

您没有进入循环,因此该函数实际上没有返回值。这可以通过在循环内打印一些东西来验证:

def same_first_last(nums):
    for i in nums:
        print("in the loop")
        if nums[0] == nums[-1] and len(nums) >= 1:
            return True
        else:
            return False


print(same_first_last([]))

您实际上可以通过交换 if() 语句中的条件并删除 for 循环来使此代码工作,如下所示:

def same_first_last(nums):
    return len(nums) >= 1 and nums[0] == nums[-1]

print(same_first_last([]))
相关问题