【问题标题】:Merge some list items in a Python List合并 Python 列表中的一些列表项
【发布时间】:2010-11-11 16:29:08
【问题描述】:

假设我有一个这样的列表:

[a, b, c, d, e, f, g]

如何修改该列表使其看起来像这样?

[a, b, c, def, g]

我更希望它直接修改现有列表,而不是创建新列表。

【问题讨论】:

  • 合并的依据是什么?
  • 什么是a、b等(即什么数据类型)?就目前而言,将其输入 Python 解释器会出错,因为这些是未绑定的名称。
  • 您是否始终希望将列表中的这些项目连接起来,或者您希望能够选择以后的位置和数量?

标签: python list concatenation


【解决方案1】:

合并应该在什么基础上进行?你的问题比较模糊。另外,我假设 a, b, ..., f 应该是字符串,即 'a', 'b', ..., 'f'。

>>> x = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> x[3:6] = [''.join(x[3:6])]
>>> x
['a', 'b', 'c', 'def', 'g']

查看sequence types 上的文档,特别是mutable sequence types。也许还有string methods

【讨论】:

    【解决方案2】:

    这个例子很模糊,但也许是这样的?

    items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
    items[3:6] = [''.join(items[3:6])]
    

    它基本上做了一个拼接(或assignment to a slice)操作。它删除第 3 到第 6 项并在其位置插入一个新列表(在本例中是一个包含一项的列表,它是已删除的三个项的串联。)

    对于任何类型的列表,您都可以这样做(对所有项目使用 + 运算符,无论它们是什么类型):

    items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
    items[3:6] = [reduce(lambda x, y: x + y, items[3:6])]
    

    这利用了reduce 函数和lambda 函数,该函数基本上使用+ 运算符将项目添加在一起。

    【讨论】:

    • 这对字符串列表非常有用。如果元素不是字符串,则需要使用 ''.join() 以外的其他内容
    • 你说得对,我添加了一个使用reduce 的示例,它适用于支持+ 运算符的任何类型的项目。除非 OP 扩展他的问题,否则我不能做更多的事情。
    • 他的问题对于字符串以外的任何东西都没有任何意义。
    • 支持使用 reduce 的通用解决方案 - 尽管这个问题似乎只对字符串有意义,但将列表的所有元素相互附加的通用解决方案是一个很好的解决方案。
    【解决方案3】:

    只是变种

    alist=["a", "b", "c", "d", "e", 0, "g"]
    alist[3:6] = [''.join(map(str,alist[3:6]))]
    print alist
    

    【讨论】:

      【解决方案4】:

      当然@Stephan202 给出了一个非常好的答案。我提供了一个替代方案。

      def compressx(min_index = 3, max_index = 6, x = ['a', 'b', 'c', 'd', 'e', 'f', 'g']):
          x = x[:min_index] + [''.join(x[min_index:max_index])] + x[max_index:]
          return x
      compressx()
      
      >>>['a', 'b', 'c', 'def', 'g']
      

      您还可以执行以下操作。

      x = x[:min_index] + [''.join(x[min_index:max_index])] + x[max_index:]
      print(x)
      
      >>>['a', 'b', 'c', 'def', 'g']
      

      【讨论】:

        【解决方案5】:

        我的心灵感应能力不是特别好,但这是我认为你想要的:

        def merge(list_of_strings, indices):
            list_of_strings[indices[0]] = ''.join(list_of_strings[i] for i in indices)
            list_of_strings = [s for i, s in enumerate(list_of_strings) if i not in indices[1:]]
            return list_of_strings
        

        我应该注意,因为它可能并不明显,它与其他答案中提出的不同。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-16
          • 2017-10-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-16
          • 2017-09-28
          • 2012-04-13
          相关资源
          最近更新 更多