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

时间:2019-03-07 03:01:15

标签: python string

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

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']

如何在单行sol'n中做到这一点?

(如果有上下文帮助,请假设它不会一直位于索引位置0)

2 个答案:

答案 0 :(得分:1)

您可以使用列表解析来模拟拆包:

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)

答案 1 :(得分:1)

第二个问题,您可以使用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']