繁体   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