假设我有一个这样的列表:
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)
答案 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']