遍历一个包含多个列表和一个列表的列表。

3

我有一个列表,它的元素可以具有一个属性,该属性是一个列表。

a =  [ob1,ob2,ob3,ob4,ob52,ob7,ob8,ob10]
ob52.list = [ob5,ob6]
ob82.list = [ob8,ob9]

和一个列表

b= [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10]

两个列表都包含10个元素,也就是说它们将始终包含相同数量的元素。

我的意图是如果ob.has_list == False,则为所有i执行ob[i].b = b[i]。如果ob有一个列表,则将ob[i].list的每个元素分配给相应的b[i]

我已经像这样解决了它(很像C语言),并且想知道是否有更简单的方法。

i=0;k=0;j=0
for k in xrange(0,len(a)):
    if k<i:
        continue
    if a[j].has_list:
        for q in a[j].list:
            q.b = b[i]
            i+=1
    else:
        a[j].b = b[i]
        i+=1
    j+=1
1个回答

1

由于展平后的a长度与原始列表相同,因此您可以展平a,然后使用zip函数:

import itertools

flat_a = itertools.chain.from_iterable(
            (e.list if e.has_list else (e,))
                for e in a)

for xa, xb in zip(flat_a, b):
    xa.b = xb

这不起作用,因为两个列表的长度不相等,如果包括子列表,则它们的长度相等。 - user4018217

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接