Stackoverflow,你好,
我有一个非常紧张的问题要问我,我现在几个小时都无法解决。
任务是:
我有一个 list :
['Egg', 'Milk', 'Tomato', '_', 'Duck', 'Water', 'Honey', 'Soy', '_', 'Potato', 'Garlic', 'Gouda', '_', 'Beef', 'Sweet', 'Pita', 'Wine', 'Tomato']
我需要将其转换为新的,其中“_”之间的所有成分将作为一个元素:
a= [['鸡蛋', '牛奶', '番茄'], ['鸭', '水', '蜂蜜', '大 bean '], ['土 bean ', '大蒜', '豪达'],['牛肉','甜','皮塔',' Wine ','番茄']]
。
但是,这里的困难部分是我可能在初始列表中有更多“小列表”。
例如,在最后一个“Tomato”之后,它也可能是一个“_”,然后再添加一些成分,例如 ['Bread', 'Milk', 'Egg']
。
初始列表可能如下所示:
['Egg', 'Milk', 'Tomato', '_', 'Duck', 'Water', 'Honey', 'Soy', '_', 'Potato', 'Garlic', 'Gouda', '_', 'Beef', 'Sweet', 'Pita', 'Wine', 'Tomato', '_', 'Bread', 'Milk', 'Egg']
所以我发现我不能手动创建 4 个不同的列表,然后将它们连接起来,因为大列表中可能有 5 个或更多列表,并用“_”分隔。我必须做点别的事。但我得到的只是错误的东西:
for elem in ingridient_names:
i=1
if elem != '_':
ingridient_names_final[i].append(elem)
print(ingridient_names_final)
有人可以帮忙吗?
最佳答案
您可以使用itertools.groupby
对连续的字符串进行分组,直到遇到'_'
,然后将它们转换为子列表。
>>> from itertools import groupby
>>> ingridient_names = ['Egg', 'Milk', 'Tomato', '_', 'Duck', 'Water', 'Honey', 'Soy', '_', 'Potato', 'Garlic', 'Gouda', '_', 'Beef', 'Sweet', 'Pita', 'Wine', 'Tomato']
>>> ingridient_names_final = [list(g) for k,g in groupby(ingridient_names, key=lambda i: i!='_') if k]
>>> ingridient_names_final
[['Egg', 'Milk', 'Tomato'],
['Duck', 'Water', 'Honey', 'Soy'],
['Potato', 'Garlic', 'Gouda'],
['Beef', 'Sweet', 'Pita', 'Wine', 'Tomato']]
关于python - Python 中将唯一列表改造为另一种类型的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61081505/