我一直在python文章/书中看到python很简单,它只有一种做事方式。我想有人向我解释这个概念请记住下面的例子,如果我想获得序列的最小值和最大值,我会做以下事情;
seq=[1,2,3,4,5,6]
min(seq) #1
max(seq) #6
但我也可以这样做;
seq[:1] #1
seq[-1] #6
肯定这是做一件简单事情的两种方法。这让我有点困惑。
答案 0 :(得分:27)
并不是说“有一种做事方式”更多“应该有一种 - 最好只有一种 - 明显的做法”。 (来自Python的禅宗)。
这并不排除拥有多种做事方式的可能性。我们谈论的是编程,其中创造力是最重要的技能之一,找到解决问题的新方法是必须的。
在你的例子中,你做了两件不同的事情:
在这种特殊情况下,结果完全相同。
答案 1 :(得分:15)
这是两件不同的事情。 max()
为您提供列表中最大的元素(默认情况下使用常规数字比较),而[-1]
为您提供 last 元素 - 在您的例如,这恰好是同一件事。但请考虑一下:
>>> seq = [2, 7, 5, 4]
>>> max(seq)
7
>>> seq[-1]
4
BTW,seq[:1]
再次给你一些不同的东西 - 即[1]
(或我的例子中的[2]
),一个单元素列表。你可能想要的是seq[0]
,它是列表的第一个元素,与min(seq)
,最小元素相比。
答案 2 :(得分:7)
一种明显的方式。
>>> import this
答案 3 :(得分:3)
在您的示例中,您实际上做了两件不同的事情 - 他们碰巧提供相同的结果,因为您的输入列表已排序。但是,总有多种做事方式。 Python的方法并不是真正避免或禁止多种方式做同样的事情,而是有一种 - 最好只有一种 - 显而易见的做事方式。
答案 4 :(得分:1)
max(),min()和索引切片它们都做不同的事情。在您的列表中,订单可能不会像您的示例那样排序,因此在这些情况下使用切片不会获得最大/最小值。如果您想获得最大/最小值,只需使用max()/min()
函数
答案 5 :(得分:0)
解决问题总有不止一种方法,但python开发人员尽量不添加提供冗余功能的语言功能,这与perl非常不同。