【发布时间】:2014-07-22 14:34:37
【问题描述】:
我不是在寻找解决方案(我有两个 ;)),而是在洞察力比较每个解决方案的优缺点,考虑到 python 的内部结构。谢谢!
与同事一起,我们希望为所有元素提取两个连续列表元素之间的差异。所以,对于列表:
[1,2,4]
预期的输出是:
[1,2]
(因为 2-1 = 1,而 4-2 = 2)。
我们提供了两种解决方案,我不确定它们如何比较。第一个非常类似于 C,它将列表视为一个表格,并减去两个连续列表元素之间的差异。
res = []
for i in range(0, len(a)-1):
res.append(a[i+1] - a[i])
第二个是(对于列表“l”),我认为,更pythonic:
[j - i for i,j in zip(l[:-1], l[1:])]
但是,构建两个列表副本然后提取差异不是效率低得多吗? Python 如何在内部处理这个问题?
感谢您的见解!
【问题讨论】:
-
你应该发布这两个解决方案,它们会更容易比较。
-
如果您不想构建列表副本,请使用
itertools.izip和itertools.islice。 -
@TheSoundDefense :确实,谢谢。我已经编辑了我的帖子。
-
这些列表是否足够大以关心性能?只写最易读的版本和可维护的版本。
-
注意:您可以通过使用
l而不是l[:-1]轻松提高第二种解决方案的性能。zip在 shortest 输入完成时已经终止,因此您必须删除最后一个元素。
标签: python