[英]How to split string of index in list and store within same list?
假設我有一個這樣的列表:
lst = ['apple orange', 'banana', 'grape']
我知道list[0].split()
只會返回一個包含['apple', 'orange']
的列表['apple', 'orange']
但是我想通過簡單的sol'n實現以下目標:
lst = ['apple', 'orange', 'banana', 'grape']
范例2:
假設清單為:
lst = ['apple orange', 'banana', 'grape', 'foo fi']
我只想要
lst = ['apple', 'orange', 'banana', 'grape', 'foo fi']
如何在一站式解決方案中做到這一點?
(如果某些上下文有幫助,請假設它不會一直位於索引位置0)
您可以使用列表解析來模擬拆包:
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)
對於第二個問題,您可以使用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']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.