首先感谢提前,对python来说还是一个新手。
我有以下列表:
GroceryList = ['apples', 'oranges', 'strawberries and grapes', 'blueberries']
我尝试使用.replace代码:
GroceryList = [f.replace('and', '\'' + ',' + '\'') for f in GroceryList]
这会替换'和',但打印列表后的输出是:
['apples', 'oranges', "strawberries ',' grapes", 'blueberries']
这留下两个引号,在四个项目而不是预期的五个项目上创建另一个列表。 有谁知道为什么? (在你的解释中,如果可能的话,你能解释一下我做错了吗?)
答案 0 :(得分:6)
在此使用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
答案 1 :(得分:0)
问题是您手动将字符串更改为两个单独的列表项。这与将字符串拆分为多个对象不同。使用str.split
方法。
new_grocery_list = []
for item in GroceryList:
new_grocery_list.extend(item.split(' and '))
print(new_grocery_list)
您也可以在列表理解中一次完成所有这些操作。但是,阅读起来不那么直观,所以我个人更喜欢这种情况下的显式循环。 Readability counts!
new_grocery_list = [subitem for item in GroceryList for subitem in item.split(' and ')]
print(new_grocery_list)
答案 2 :(得分:0)
可以使用以下内容仅将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']