Skip to main content
 首页 » 编程设计

python之如何判断一个二维列表是否为 "rectangular"

2025年05月04日14langtianya

现在我正在尝试让我的程序将二维列表作为输入并返回 true 或 false,具体取决于它是否为“矩形”(例如 [[2,3],[1 ,5],[6,9]] 是矩形,而 [[2,3],[1,8,6]] 不是。)到目前为止,我已经想到了这个:

def rectangular(List): 
    n = List 
    for i in n: 
        if len(i) != len(n[0]): 
            return False 
        elif len(i) == len(n[0]): 
            i 

我似乎无法弄清楚如何创建一个“真实”案例。使用上面的 elif,我可以在列表中循环,但是如果我要添加一个 return true 部分,它会在这种情况下立即停止。在这种情况下,while 循环会更好吗?感谢所有帮助!谢谢。

请您参考如下方法:

如果你走到最后没有发现一个假的案例,那么你就知道这是真的,对吧?没有任何其他可能性。

因此,您可以完全删除 elif,并在末尾添加一个 return True:

def rectangular(List): 
    n = List 
    for i in n: 
        if len(i) != len(n[0]): 
            return False 
    return True 

作为旁注,与 if 具有完全相反条件的 elif 最好写成 else:。这样,您就不可能弄错相反的条件,您的读者也无需弄清楚它是相反的,等等。

此外,没有理由将参数作为 List,然后将相同的值绑定(bind)到 n 并使用它。为什么不首先使用 n?

def rectangular(n): 
    for i in n: 
        if len(i) != len(n[0]): 
            return False 
    return True 

通过将 for 语句替换为生成器表达式和 all 函数,您可以使它更简洁,也许更 Pythonic:

def rectangular(n): 
    return all(len(i) == len(n[0]) for i in n) 

但实际上,这与您已有的并没有太大区别。您应该了解它是如何工作的,但如果您还不了解它,那么以更详细的方式进行操作也没有问题。


如果你想变聪明:

def rectangular(n): 
    lengths = {len(i) for i in n} 
    return len(lengths) == 1 

我们正在制作一组所有长度。集合没有重复项,因此这是所有不同 长度的集合。如果只有 1 个不同的长度,则意味着所有长度都相同。

但是,请注意,对于空列表,这将返回 False(因为有 0 长度,而不是 1),而其他两个将返回 True(因为如果没有要测试的值,则条件对所有值都为真)。我不确定你想要哪一个,但是弄清楚如何改变你选择的那个做相反的事情应该相对容易。