序列中的子序列

时间:2013-11-09 10:02:37

标签: python

我正在寻找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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]

答案 2 :(得分:0)

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

答案 3 :(得分: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]