【发布时间】:2017-07-22 23:45:49
【问题描述】:
我正在尝试编写一个程序(在 python2.7 中),它接收整数列表并使用迭代返回列表中第三小的整数。如果有两个整数,则返回较大的整数。如果只有一个整数,则返回该整数。如果没有,则返回 none。 我很困惑,我不知道该怎么写。我在这里做了一个尝试: 更新版本:
s = raw_input("Enter your list:")
L = list(s)
sorted(L, key=int)
return [2]
if len(L) = [0:2]
return [1]
if len(L) = [0]
return 0
if len(L) = []
return none
但是,我在这方面遇到了一些困难。关于如何修改它以让它做我想做的任何建议?我知道堆函数,但我试图在不使用它的情况下编写它。非常感谢!
【问题讨论】:
-
对列表进行排序,然后返回第三个,如果列表长度小于3则返回最后一个。
-
您希望
if s is (a, b):做什么?您尚未分配变量a和b。这是一个新列表,它永远不会与另一个列表相同。 -
如果您想知道列表的长度,请使用
if len(L) == 2:。为什么在函数中使用s而不是L?为什么你返回sys.maxint而不是更高的那个? -
您似乎根本没有真正考虑到这一点,您只是将随机代码放在一起。
-
为了记录,在实际代码中,我会跳过排序以支持
heapq.nsmallest,它只对O(k log n)起作用(其中k是要提取的最小项目的数量,并且n是完整列表长度)而不是O(n log n)。通过使用-1对结果进行索引,您不需要列出大小为 1 或 2 的特殊情况;哎呀,你甚至可以变得聪明并做(heapq.nsmallest(3, L) or [None])[-1],这样你就可以无缝地处理空列表(以及无法预先检查长度的非列表输入)。
标签: python python-2.7 list