现在我正在尝试让我的程序将二维列表作为输入并返回 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(因为如果没有要测试的值,则条件对所有值都为真)。我不确定你想要哪一个,但是弄清楚如何改变你选择的那个做相反的事情应该相对容易。
