我有一个列表列表,以及一个列表,其元素可以具有列表
的属性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个元素,即他们总是包含相同数量的元素。
如果所有i ob[i].b = b[i]
,我想要做的是ob.has_list == False
如果ob
有一个列表,则为ob[i].list
的每个元素分配相应的b[i]
我已经解决了这个问题(相当C'ish),并且想知道是否有更简单的方法。
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
答案 0 :(得分: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