[英]Python: turn one item in list into two items
首先感謝提前,對python來說還是一個新手。
我有以下列表:
GroceryList = ['apples', 'oranges', 'strawberries and grapes', 'blueberries']
我嘗試將.replace與代碼結合使用:
GroceryList = [f.replace('and', '\'' + ',' + '\'') for f in GroceryList]
這將替換'和',但打印列表后的輸出是:
['apples', 'oranges', "strawberries ',' grapes", 'blueberries']
這留下兩個引號,在四個項目而不是預期的五個項目上創建另一個列表。 有誰知道為什么? (在你的解釋中,如果可能的話,你能解釋一下我做錯了嗎?)
在此處使用str.split
和str.join
:
>>> GroceryList = ['apples', 'oranges', 'strawberries and grapes', 'blueberries']
>>> [", ".join(x.split(' and ')) for x in GroceryList]
['apples', 'oranges', 'strawberries, grapes', 'blueberries']
還是您想要這樣:
>>> [y for x in GroceryList for y in x.split(' and ')]
['apples', 'oranges', 'strawberries', 'grapes', 'blueberries']
str.split
在傳遞給它的sep
處分割一個字符串(或默認在任何空白處)並返回一個列表。
>>> strs = 'strawberries and grapes'
>>> strs.split(' and ')
['strawberries', 'grapes']
添加,
使用這兩個詞之間str.replace
的字符串不使得兩個不同的字符串,您只需修改該字符串,並在其中添加了一個逗號。
一種類似的方法是使用ast._literal_eval
但建議在此使用。
但是這需要在它們周圍加上引號。
例:
>>> from ast import literal_eval
>>> strs = '"strawberries" and "grapes"'
>>> literal_eval(strs.replace('and', ',')) # replace 'and' with a ','
('strawberries', 'grapes') #returns a tuple
問題是您正在手動更改字符串以使其看起來像兩個單獨的列表項。 這與將字符串拆分為多個對象不同。 為此,請使用str.split
方法。
new_grocery_list = []
for item in GroceryList:
new_grocery_list.extend(item.split(' and '))
print(new_grocery_list)
您還可以一次完整地理解列表。 但是,閱讀起來有點不那么直觀,因此我個人更喜歡這種情況下的顯式循環。 可讀性很重要!
new_grocery_list = [subitem for item in GroceryList for subitem in item.split(' and ')]
print(new_grocery_list)
可以使用以下內容僅拆分and
作為一個單詞,並在...之后將它連接在一起
from itertools import chain
import re
GroceryList = ['apples', 'oranges', 'strawberries and grapes', 'blueberries']
new_stuff = list(chain.from_iterable(re.split(r'\b\s*and\s*\b', el) for el in GroceryList))
# ['apples', 'oranges', 'strawberries', 'grapes', 'blueberries']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.