我需要循环浏览这个列表,但是我对此感到困惑。
这是我的代码:
folders=[["Anim_2p.scn_c_DI_rig"],["Anim_2p.scn_c_TOTO_GALLO_rig"]]
members = members=[["DI_CACHE.lengua","DI_CACHE.vidrios","DI_CACHE.dientes_abajo"],["TOTO_GALLO_cache.lengua","TOTO_GALLO_cache.dientes_01","TOTO_GALLO_cache.plumas_guantes"]]
..这是理想的结果:
DI_CACHE.lengua Anim_2p.scn_c_DI_rig
DI_CACHE.vidrios Anim_2p.scn_c_DI_rig
DI_CACHE.dientes_abajo Anim_2p.scn_c_DI_rig
TOTO_GALLO_cache.lengua Anim_2p.scn_c_TOTO_GALLO_rig
TOTO_GALLO_cache.dientes_01 Anim_2p.scn_c_TOTO_GALLO_rig
TOTO_GALLO_cache.plumas_guantes Anim_2p.scn_c_TOTO_GALLO_rig
我该怎么做?我尝试了几种循环和循环方式,它没有用。
答案 0 :(得分:1)
您可以使用list comprehension:
folders = [["Anim_2p.scn_c_DI_rig"],["Anim_2p.scn_c_TOTO_GALLO_rig"]]
members = [["DI_CACHE.lengua","DI_CACHE.vidrios","DI_CACHE.dientes_abajo"],["TOTO_GALLO_cache.lengua","TOTO_GALLO_cache.dientes_01","TOTO_GALLO_cache.plumas_guantes"]]
print('\n'.join([
'{m} {f}'.format(m=member, f=folder)
for memberlist, folderlist in zip(members, folders)
for member in memberlist
for folder in folderlist]))
产量
DI_CACHE.lengua Anim_2p.scn_c_DI_rig
DI_CACHE.vidrios Anim_2p.scn_c_DI_rig
DI_CACHE.dientes_abajo Anim_2p.scn_c_DI_rig
TOTO_GALLO_cache.lengua Anim_2p.scn_c_TOTO_GALLO_rig
TOTO_GALLO_cache.dientes_01 Anim_2p.scn_c_TOTO_GALLO_rig
TOTO_GALLO_cache.plumas_guantes Anim_2p.scn_c_TOTO_GALLO_rig
列表理解等同于
result = []
for memberlist, folderlist in zip(members, folders):
for member in memberlist:
for folder in folderlist:
result.append('{m} {f}'.format(m=member, f=folder))
然后可以打印列表中的项目(每行一个)
print('\n'.join(result))
答案 1 :(得分:0)
你需要做两件事:
对后者使用itertools.product
,对前者使用zip
。
from itertools import product
for fs, ms in zip(folders, members):
for folder, member in product(fs, ms):
print ' '.join((member, folder))
产生:
>>> for fs, ms in zip(folders, members):
... for folder, member in product(fs, ms):
... print ' '.join((member, folder))
...
DI_CACHE.lengua Anim_2p.scn_c_DI_rig
DI_CACHE.vidrios Anim_2p.scn_c_DI_rig
DI_CACHE.dientes_abajo Anim_2p.scn_c_DI_rig
TOTO_GALLO_cache.lengua Anim_2p.scn_c_TOTO_GALLO_rig
TOTO_GALLO_cache.dientes_01 Anim_2p.scn_c_TOTO_GALLO_rig
TOTO_GALLO_cache.plumas_guantes Anim_2p.scn_c_TOTO_GALLO_rig
循环可以折叠成列表理解:
from itertools import product
combinations = [(member, folder) for fs, ms in zip(folders, members) for folder, member in product(fs, ms)]
生成一个列表:
>>> [(member, folder) for fs, ms in zip(folders, members) for folder, member in product(fs, ms)]
[('DI_CACHE.lengua', 'Anim_2p.scn_c_DI_rig'), ('DI_CACHE.vidrios', 'Anim_2p.scn_c_DI_rig'), ('DI_CACHE.dientes_abajo', 'Anim_2p.scn_c_DI_rig'), ('TOTO_GALLO_cache.lengua', 'Anim_2p.scn_c_TOTO_GALLO_rig'), ('TOTO_GALLO_cache.dientes_01', 'Anim_2p.scn_c_TOTO_GALLO_rig'), ('TOTO_GALLO_cache.plumas_guantes', 'Anim_2p.scn_c_TOTO_GALLO_rig')]
答案 2 :(得分:0)
如果循环列表索引而不是列表项,这种问题很容易解决。例如,您可以执行以下操作:
for i in range(len(folders)):
for m in members[i]:
print(m, folders[i][0])