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