python - Python 中将唯一列表改造为另一种类型的列表

标签 python python-3.x list

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/

相关文章:

python - 我应该使用 list() 还是用括号括起来?

list - 在 R 中将向量设置为列表组件

javascript - anchor 标记不起作用

python - 在 Python 中,如何打开一个文件并在一行中读取它,然后仍然能够关闭该文件?

python - 无需 Celery 或 Redis 即可进行进度跟踪的后台任务

python-3.x - 属性错误 : module 'dateutil.tz' has no attribute 'UTC' on Zappa Deploy

python - 如何迭代字符串中的某些字符和其他字符在python中保持相同位置

python - 在Python中迭代嵌套字典

python - 尝试运行暗网检测时无法打开文件 yolov3_custom_last.weights

python - Scrapy 蜘蛛在设置 'start_urls' 变量后不会产生 feed 输出