python有一种做事方式吗?

时间:2010-04-08 11:30:44

标签: python

我一直在python文章/书中看到python很简单,它只有一种做事方式。我想有人向我解释这个概念请记住下面的例子,如果我想获得序列的最小值和最大值,我会做以下事情;

seq=[1,2,3,4,5,6]

min(seq) #1

max(seq) #6

但我也可以这样做;

seq[:1]  #1

seq[-1]  #6
肯定这是做一件简单事情的两种方法。这让我有点困惑。

6 个答案:

答案 0 :(得分:27)

并不是说“有一种做事方式”更多“应该有一种 - 最好只有一种 - 明显的做法”。 (来自Python的禅宗)。

这并不排除拥有多种做事方式的可能性。我们谈论的是编程,其中创造力是最重要的技能之一,找到解决问题的新方法是必须的。

在你的例子中,你做了两件不同的事情:

  1. 获取列表的最小值和最大值
  2. 获取列表的第一个和最后一个元素
  3. 在这种特殊情况下,结果完全相同。

答案 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非常不同。