-1

リストの項目を別のリストの項目と連結する必要があります。私の場合、アイテムは文字列 (より正確にはパス) です。連結後、連結の結果として考えられるすべてのアイテムのリストを取得したいと考えています。

例:

list1 = ['Library/FolderA/', 'Library/FolderB/', 'Library/FolderC/']

list2 = ['FileA', 'FileB']

次のようなリストを取得したい:

[
    'Library/FolderA/FileA', 
    'Library/FolderA/FileB', 
    'Library/FolderB/FileA', 
    'Library/FolderB/FileB', 
    'Library/FolderC/FileA', 
    'Library/FolderC/FileB'
]

ありがとうございました!

4

4 に答える 4

5
In [11]: [d+f for (d,f) in itertools.product(list1, list2)]
Out[11]: 
['Library/FolderA/FileA',
 'Library/FolderA/FileB',
 'Library/FolderB/FileA',
 'Library/FolderB/FileB',
 'Library/FolderC/FileA',
 'Library/FolderC/FileB']

または、わずかに移植性が高くなります (そしておそらく堅牢に):

In [16]: [os.path.join(*p) for p in itertools.product(list1, list2)]
Out[16]: 
['Library/FolderA/FileA',
 'Library/FolderA/FileB',
 'Library/FolderB/FileA',
 'Library/FolderB/FileB',
 'Library/FolderC/FileA',
 'Library/FolderC/FileB']
于 2012-12-05T17:45:18.573 に答える
1

リスト内包表記を使用できます。

>>> [d + f for d in list1 for f in list2]
['Library/FolderA/FileA', 'Library/FolderA/FileB', 'Library/FolderB/FileA', 'Library/FolderB/FileB', 'Library/FolderC/FileA', 'Library/FolderC/FileB']

os.path.join()ただし、単純な連結の代わりに使用したい場合があります。

于 2012-12-05T17:44:21.490 に答える
0

組み込みitertoolsモジュールは、product()このための関数を定義します:

import itertools
result = itertools.product(list1, list2)
于 2012-12-05T17:45:47.077 に答える
0

ループはforこれを簡単に行うことができます:

my_list, combo = [], ''
list1 = ['Library/FolderA/', 'Library/FolderB/', 'Library/FolderC/']
list2 = ['FileA', 'FileB']
for x in list1:
   for y in list2:
      combo = x + y
      my_list.append(combo)
return my_list

それらを印刷することもできます:

list1 = ['Library/FolderA/', 'Library/FolderB/', 'Library/FolderC/']
list2 = ['FileA', 'FileB']
for x in list1:
   for y in list2:
      print str(x + y)
于 2012-12-05T18:23:29.520 に答える