-1

我需要遍历此列表,但我对此感到有些困惑。

这是我的代码:

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

我怎样才能做到这一点?我尝试了几种循环和循环的方法,但没有奏效。

4

3 回答 3

1

您可以使用列表理解

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))
于 2013-04-10T14:33:59.883 回答
0

你需要做两件事:

  1. 合并您的列表
  2. 产生两个列表的乘积

用于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')]
于 2013-04-10T14:32:21.247 回答
0

如果您在列表索引而不是列表项上循环,这种问题很容易解决。例如,您可以执行以下操作:

for i in range(len(folders)):
    for m in members[i]:
        print(m, folders[i][0])
于 2013-04-10T14:36:18.897 回答