代码之家  ›  专栏  ›  技术社区  ›  sgerbhctim

如何拆分列表中的索引字符串并存储在同一列表中?

  •  0
  • sgerbhctim  · 技术社区  · 5 年前

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

    lst = ['apple orange', 'banana', 'grape']

    我知道 list[0].split() 将只返回包含 ['apple', 'orange'] 但我想在简单的解决方案中实现以下目标:

    lst = ['apple', 'orange', 'banana', 'grape']


    例2:

    假设列表是:

    lst = ['apple orange', 'banana', 'grape', 'foo fi']

    我只想要

    lst = ['apple', 'orange', 'banana', 'grape', 'foo fi']

    我怎样才能在一行中做到这一点呢?

    (如果某些上下文有帮助,我们假设它不总是在索引位置0)

    2 回复  |  直到 5 年前
        1
  •  1
  •   iz_    5 年前

    您可以使用模拟解包的列表理解:

    lst = ['apple orange', 'banana', 'grape']
    new_lst = [w for s in lst for w in s.split()]
    print(new_lst)
    # ['apple', 'orange', 'banana', 'grape']
    

    它相当于这个更简洁但无效的版本:

    new_lst = [*s.split() for s in lst]
    

    不幸的是,这样的解包在列表理解中是不允许的,这就是为什么我们必须使用上面的解决方法。

    编辑的问题解决方案:

    index = 1 # or whatever
    lst = ['banana', 'apple orange', 'grape']
    lst[index:index + 1] = lst[index].split()
    print(lst)
    

    上面的工作已经到位;如果您想创建一个副本,您可以使用上面的内容,但要创建一个副本,或者:

    index = 1 # or whatever
    lst = ['banana', 'apple orange', 'grape']
    new_lst = lst[:index] + lst[index].split() + lst[index + 1:]
    print(new_lst)
    
        2
  •  1
  •   rafaelc    5 年前

    对于第二个问题,您可以使用 slicing

    def split_at(l, i):
        return l[:i] + l[i].split() + l[i+1:]
    

    例如:

    >>> split_at(l,0)
    ['apple', 'orange', 'banana', 'grape', 'foo fi']
    
    >>> split_at(l,3)
    ['apple orange', 'banana', 'grape', 'foo', 'fi']