你能建议一种更好的方法来组合列表中的字符串吗?
以下是一个例子:
[ 'prefix-' + a + '-' + b for a in [ '1', '2' ] for b in [ 'a', 'b' ] ]
导致:
['prefix-1-a', 'prefix-1-b', 'prefix-2-a', 'prefix-2-b']
实际的上下文是使用文件和路径:
dirs = [ 'dir1', 'dir2' ]
files = [ 'file1', 'file2' ]
[ 'home/' + d + '/' + f for d in dirs for f in files ]
导致:
['home/dir1/file1', 'home/dir1/file2', 'home/dir2/file1', 'home/dir2/file2']
答案 0 :(得分:3)
您可以使用列表理解,os.path.join
函数和itertools
模块:
[os.path.join('home', a, b) for a, b in itertools.product(ddirs, files)]
答案 1 :(得分:3)
要专门处理文件路径,请使用os.path.join
:
dirs = ['dir1', 'dir2']
files = ['file1', 'file2']
[os.path.join('home', d, f) for d in dirs for f in files]
答案 2 :(得分:1)
str.join
怎么样。
['-'.join(('prefix', a, b)) for a, b in zip('12', 'ab')]
正如其他人所提到的,你应该使用os.path.join
作为文件路径。
答案 3 :(得分:1)
您可以将笛卡尔积用于列表。
import itertools
for element in itertools.product(["1", "2"], ["a", "b"]):
print element
# Gives
('1', 'a')
('1', 'b')
('2', 'a')
('2', 'b')
然后加入他们你想要的。
答案 4 :(得分:0)
第一个:['prefix-%s-%s' % (a,b) for a in [1, 2] for b in 'ab']
第二个可能是相同的方式,但您可能希望使用os.path.join
来规范化Windows:
[os.path.join('home', dir_, file_) for dir_ in ['dir1', 'dir2'] for file_ in ['file1', 'file2']]