gpt4 book ai didi

python - 如何在循环时从 Python 列表中排除对象

转载 作者:行者123 更新时间:2023-11-28 21:54:34 24 4
gpt4 key购买 nike

我正在编写一个循环遍历对象列表的程序。在该循环内是第二个循环,它遍历除第一个循环中的当前对象之外的所有对象。这重复了几次:

for obj1 in obj_list:
for obj2 in (obj_list except obj1):
for obj3 in (obj_list except obj1 and obj2):
...

我的实际代码在循环之间做了一些事情,所以我不能只使用 itertools 中的 permutations() 或类似的东西。我可以这样实现它:

for i1 in range(len(obj_list)):
obj1 = obj_list[i1]
for i2 in range(len(obj_list)-1):
obj2 = (obj_list[:i1] + obj_list[i1 + 1:])[i2]
...

但是,这会导致代码困惑,并且在我尝试排除多个对象时变得非常困惑。有没有一种简洁的方法来实现这个想法,类似于第一个代码块,最终不会修改原始列表?请注意,我的列表中没有重复的对象,因此不允许使用它们的方法就可以了。

最佳答案

考虑一下:

for obj1 in obj_list:
for obj2 in (obj for obj in obj_list if obj != obj1):
for obj3 in (obj for obj in obj_list if obj not in (obj1, obj2)):
# ....

你可以制作一个更通用的生成器来做你想做的事:

def exclusion_generator(base_list, to_excludes):
for item in base_list:
if item not in to_excludes:
yield item

并像这样使用它:

for obj1 in objs:
for obj2 in exclusion_generator(objs, (obj1,)):
for obj3 in exclusion_generator(objs, (obj1, obj2)):
# ....

关于python - 如何在循环时从 Python 列表中排除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24027990/

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