我正在为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
我正在为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
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
这是一个递归解决方案:
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]
除非您事先知道要操作的字符串的长度,否则您无法对该字符串做太多事情。即使你知道字符串的长度,解决方案也不会很优雅。
此方法使用列表推导和 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]