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

问题描述 投票:-1回答:2

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

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

我知道list[0].split()只会返回一个包含['apple', 'orange']的列表,但我想在一个简单的sol'n中实现以下内容:

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


例2:

我们说这个清单是:

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

而我只想要

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

我怎么能在单行sol'n中做到这一点?

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

python string
2个回答
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
投票

对于你的第二个问题,你可以使用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']
© www.soinside.com 2019 - 2024. All rights reserved.