迭代包含类实例的2个列表

时间:2014-09-04 20:05:08

标签: python list iteration

我有2个列表,一个静态变量和一个带有4个属性的类实例。

列表包含具有自己变量的类实例。

静态变量将在所有类实例中使用。

类实例从list_a的每个类实例获取2个变量,从list_b获取一个变量,最后一个插槽用于静态变量。

static_variable = 1
list_a = [class_instance]  
list_b = [class_instance]
class_instance(data1_from_list_a, data2_from_list_a, data6_from_list_b, static_variable) #<--- this class instance takes 4 attributes.

这两个列表中的实例是来自这两个类的实例:

class FOO:
    def__init__(self, data1, data2, data3) #<---- Foo instances inside list_a

class BAR:
    def __init__(self, data4, data5, data6) #<---- Bar instances inside list_b

我想同时迭代这两个列表,并将list_a中的前两个变量放入我的class_instance的前两个槽中,第三个变量来自list_B,第四个变量是静态变量。

我该怎么做?

由于

2 个答案:

答案 0 :(得分:0)

我假设你有一个像

这样的课程
class Foo(object):
    def __init__(self, a1, a2, b1, s):
        ...

并且您希望使用Foo中的元素来填充list_aa1来创建a2的实例,b中的元素填充b并使用static_variable填充s。试试这个:

a_iter = iter(list_a)
instances = [ Foo(next(a_iter), next(a_iter), b, s) for b in list_b ]

我也假设len(list_a) == 2*len(list_b),因此list_a的迭代器在list_b的迭代器之前没有用完。

答案 1 :(得分:0)

如果我理解正确,你真正的问题是如何并行迭代这两个列表。与其他语言的答案通常是迭代索引不同,在Python中,您可以使用zip函数一次迭代多个列表。这是一个简单的例子,使用列表推导来使用来自两个现有列表中的实例的数据构建一系列新实例:

result = [MyClass(a.data1, a.data2, b.data6, static_var) for a, b in zip(list_a, list_b)]

zip调用返回一个迭代器,它产生2元组,并将其解压缩到变量ab中。然后,对实例的引用可以访问其属性以获取数据。