有没有一种方法可以在for循环中向列表中添加内容,而不必在for循环之前初始化列表



我正在尝试对具有多个属性的类进行排序,并将每个属性放入一个列表中。这在单元测试中被用来确认我的类对它们进行了正确的排序。有没有一种方法可以创建一个列表,并在for循环中的一行添加内容(比如在列表理解中(?

例如,为了现在对它们进行排序,我必须使用这样的东西:

objectsObject类项目的列表

red_objects = []
blue_objects = []
green_objects = []
for object in objects:
if object.color == 'red':
red_objects.append(object.name)
elif object.color == 'blue':
blue_objects.append(object.name)
elif object.color == 'green':
green_objects.append(object.name)

或者类似的东西:

red_objects = [object.name for object in objects if object.color == 'red']
blue_objects = [object.name for object in objects if object.color == 'blue']
green_objects = [object.name for object in objects if object.color == 'green']

显然,第二个选项要干净得多,但我必须分别运行三次循环。有没有某种方法可以将这两种方法结合起来,这样我只能运行一次循环,但我可以以类似于列表理解的方式创建列表?

也许使用dict:

red_objects, blue_objects, green_objects = [],[],[]
my_dict = {'red': red_objects.append, 'blue': blue_objects.append, 'green': green_objects.append}
for object in objects:
my_dict[object.color](object.name)

最新更新