2

我正在为python中的这个问题寻找一个优雅的解决方案(不使用内置函数)。

Example: 4, 3, 8, 2, 5, 9, 110
Result: 4, 8, 5,9, 110
Example: 6, 6, 6
Result: 6
Example: 9, 8, 7
Result: 9
Example: 1, 2, 3
Result: 1,2,3
4

4 回答 4

4
def foo(seq):
  if seq == None or seq == []:
    return []
  outp = [seq[0]]
  for a in seq:
    if a > outp[-1]:
      outp.append(a)
  return outp
于 2013-11-09T10:11:42.837 回答
2

这是一个递归解决方案:

def greater_adder(l):

    def list_iter(stack, li):

        if not li:
            return stack

        if stack[-1] < li[0]:
            stack.append(li[0])
            return list_iter(stack, li[1:])
        else:
            return list_iter(stack, li[1:])

    return list_iter([l[0]], l[1:])

控制台会话:

>>> from higher_up import greater_adder
>>> nums = [4, 3, 8, 2, 5, 9, 110]
>>> greater_adder(nums)
Out[5]: [4, 8, 9, 110]
>>> nums = [6, 6, 6]
>>> greater_adder(nums)
Out[7]: [6]
>>> nums = [9, 8, 7]
>>> greater_adder(nums)
Out[9]: [9]
>>> nums = [1,2,3]
>>> greater_adder(nums)
Out[11]: [1, 2, 3]
于 2013-11-09T10:36:11.263 回答
0

除非您事先知道要操作的字符串的长度,否则您无法对该字符串做太多事情。即使你知道字符串的长度,解决方案也不会很优雅。

于 2013-11-09T10:14:56.927 回答
0

此方法使用列表推导和 enumerate()。无论如何,你必须使用某种循环或内置,所以我会采用这样的解决方案。

>>a = [1, 2, 1, 5, 4, 6]
>>[x for i, x in enumerate(a) if i == 0 or a[i] > a[i-1]]
[1, 2, 5, 6]
于 2013-11-09T13:33:02.447 回答