簡體   English   中英

Python:將列表中的一個項目轉換為兩個項目

[英]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.splitstr.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM