gpt4 book ai didi

python - 如何在 python 中有效地删除循环中的列表元素

转载 作者:太空狗 更新时间:2023-10-30 02:25:41 24 4
gpt4 key购买 nike

我有一个代码如下。

for item in my_list:
print(item[0])
temp = []
current_index = my_list.index(item)
garbage_list = creategarbageterms(item[0])

for ele in my_list:
if my_list.index(ele) != current_index:
for garbage_word in garbage_list:
if garbage_word in ele:
print("concepts: ", item, ele)
temp.append(ele)
print(temp)

现在,当 mylist 附加到 temp 时,我想从 ele 中删除它(这样,它就不会被处理在主循环中,因为它是一个垃圾词)。

我知道在循环中直接从列表中删除元素是不好的。因此,我很想知道是否有任何有效的方法来做到这一点?

例如,如果mylist如下;

    mylist = [["tim_tam", 879.3000000000001], ["yummy_tim_tam", 315.0], ["pudding", 298.2], 
["chocolate_pudding", 218.4], ["biscuits", 178.20000000000002], ["berry_tim_tam", 171.9],
["tiramusu", 158.4], ["ice_cream", 141.6], ["vanilla_ice_cream", 122.39999999999999]]

第一次迭代

对于第一个元素 tim_tam,我得到了诸如 yummy_tim_tamberry_tim_tam 之类的垃圾词。所以它们将被添加到我的 temp 列表中。

现在我想从列表中删除 yummy_tim_tamberry_tim_tam(因为它们已经添加到 temp),这样它就不会t 从头开始​​执行。

第二次迭代

现在,由于 yummy_tim_tam 不再在列表中,这将执行 pudding。对于 pudding,我得到了一组不同的垃圾词,例如 chocolate_puddingbiscuitstiramu。因此,它们将被添加到 temp 并被删除。

第三次迭代

ice_cream 将被选中。这个过程会继续下去。

我的最终目标是获得三个单独的列表,如下所示。

["tim_tam", 879.3000000000001], ["yummy_tim_tam", 315.0], ["berry_tim_tam", 171.9] , ["pudding", 298.2]

["chocolate_pudding", 218.4], ["biscuits", 178.20000000000002], ["tiramusu", 158.4]

["ice_cream", 141.6], ["vanilla_ice_cream", 122.39999999999999]

最佳答案

这段代码产生你想要的:

my_list = [['tim_tam', 879.3], ['yummy_tim_tam', 315.0], ['pudding', 298.2],
['chocolate_pudding', 218.4], ['biscuits', 178.2], ['berry_tim_tam', 171.9],
['tiramusu', 158.4], ['ice_cream', 141.6], ['vanilla_ice_cream', 122.39]
]

creategarbageterms = {'tim_tam' : ['tim_tam','yummy_tim_tam', 'berry_tim_tam'],
'pudding': ['pudding', 'chocolate_pudding', 'biscuits', 'tiramusu'],
'ice_cream': ['ice_cream', 'vanilla_ice_cream']}

all_data = {}
temp = []
for idx1, item in enumerate(my_list):
if item[0] in temp: continue
all_data[idx1] = [item]

garbage_list = creategarbageterms[item[0]]

for idx2, ele in enumerate(my_list):
if idx1 != idx2:
for garbage_word in garbage_list:
if garbage_word in ele:
temp.append(ele[0])
all_data[idx1].append(ele)

for item in all_data.values():
print('-', item)

这会产生:

- [['tim_tam', 879.3], ['yummy_tim_tam', 315.0], ['berry_tim_tam', 171.9]]
- [['pudding', 298.2], ['chocolate_pudding', 218.4], ['biscuits', 178.2], ['tiramusu', 158.4]]
- [['ice_cream', 141.6], ['vanilla_ice_cream', 122.39]]

请注意,出于示例的目的,我创建了一个模拟的 creategarbageterms 函数(作为字典),它会生成您在帖子中定义的术语列表。请注意 defaultdict 的使用,它允许无限次迭代,即生成无限数量的最终列表。

关于python - 如何在 python 中有效地删除循环中的列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48249159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com