【问题标题】:Joining Subsequent List Elements - Python加入后续列表元素 - Python
【发布时间】:2011-07-20 13:24:34
【问题描述】:

是否有合并列表中后续元素的命令 - 即在列表中 ['AA', 'BB', 'C', 'D'] 如何合并前两个元素(或任何其他元素,具体取决于在代码上)在列表中,留下一个类似 ['AABB', 'C', 'D'] 的列表?谢谢!

【问题讨论】:

    标签: python merge


    【解决方案1】:
    >>> a = ['AA', 'BB', 'C', 'D']
    >>> a[0:2] = [''.join(a[0:2])]
    >>> a
    ['AABB', 'C', 'D']
    

    【讨论】:

    • 仅适用于字符串,但切片分配是个好技巧。
    • 谢谢,这是一个很好的方法。我想就我而言,我会先尝试@Artsiom 的方式,但感谢您的努力!
    【解决方案2】:

    如果你不关心初始化列表,你可以尝试以下方法:

    >>> a = ['AA', 'BB', 'C', 'D']
    >>> a[0] += a.pop(1)
    

    如果你想获得新的并保持 initList 不变,你可以使用类似这样的东西(注意这只是一个示例):

    a = ['AA', 'BB', 'C', 'D']
    outList = a[:] # make a copy of list values
    outList[0] += outputList.pop(1)
    

    或者在某些情况下,您也可以尝试使用类似的东西:

    from itertools import groupby
    
    a = ['AA', 'BB', 'C', 'D']
    res = [''.join((str(z) for z in y)) for x, y in groupby(a, key = lambda x: len(x) == 2)]
    

    【讨论】:

    • outlist = a[:],然后outlist[0] += outlist.pop(1) 更好。
    • 当人们在没有说明理由的情况下拒绝投票时总是很烦人。为什么你不想说什么
    【解决方案3】:

    这是一个使用迭代器的 python 3.x 解决方案,因此与任何生成器对象兼容(如 range 对象...):

    def merger(iterable, index=0, length=1):
        it = iter(iterable)
        for count in range(index):
            yield next(it)
        merged = next(it)
        for count in range(length-1):
            merged += next(it)
        yield merged
        for item in it:
            yield item
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 2021-06-27
      • 2014-08-15
      • 2020-01-25
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      相关资源
      最近更新 更多