+ -
当前位置:首页 → 问答吧 → python 列表操作 自定义函数算法求助

python 列表操作 自定义函数算法求助

时间:2011-04-15

来源:互联网

想要达到的效果描述如下:
mylist = ['E','F','B','C','D','H','I','J','K']

能否定义一个函数,以列表为参数,返回一个列表结果类似于  ['EF','BCD','HIJK']
规则就是  将原列表中  连续且递增的几个元素合并


def myfuc(mylist):
    newlist = []
    ......
    return newlist

算法想了很久,还是无解,大家能否帮忙研究下?

作者: playboysen   发布时间: 2011-04-15

本帖最后由 a515200 于 2011-04-16 02:16 编辑

既然是递增,那么就从一开始,同时也要算到递增n回以后元素不够的情况,也合并

如 lst = ['1','2','2','3','3','3','4','4','4','4','5','5','5','5','5','6','6','6']

可以这样
  1. def root(lst,lst1=[],j=0,i=1):
  2.       while j<len(lst):
  3.            lst1.append( ''.join(lst[j:j+i]) )
  4.            j+=i; i+=1
  5.       return lst1
复制代码
递归的话,装b一点的就是
def root(lst,lst1=[],j=0,i=1):
      return lst1 if j<len(lst) else root(lst,lst1.append( ''.join(lst[j:j+i]) ),j=j+i,i=i+1)
这个没试过,直接敲的,可以化成易看的形式,不过手痒了没办法


其中算法复杂数依赖于n(列表的长度)的增长,  (j,i,j+i,i+1...n-1)<n   算法复杂度为(O(j))  j同时也是一个计数器

作者: a515200   发布时间: 2011-04-16