通过列表理解组合字符串的惯用方法
Idiomatic way to combine strings via list comprehension
你能推荐一种更好的方法来组合列表中的字符串吗?
这是一个例子:
[ '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']
怎么样
['-'.join(('prefix', a, b)) for a, b in zip('12', 'ab')]
正如其他人提到的,您应该使用 os.path.join
作为文件路径。
第一个:['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']]
您可以使用列表理解、os.path.join
函数和 itertools
模块:
[os.path.join('home', a, b) for a, b in itertools.product(ddirs, files)]
您可以对列表使用笛卡尔积。
import itertools
for element in itertools.product(["1", "2"], ["a", "b"]):
print element
# Gives
('1', 'a')
('1', 'b')
('2', 'a')
('2', 'b')
然后随心所欲地加入他们。
要专门处理文件路径,请使用 os.path.join
:
dirs = ['dir1', 'dir2']
files = ['file1', 'file2']
[os.path.join('home', d, f) for d in dirs for f in files]
你能推荐一种更好的方法来组合列表中的字符串吗?
这是一个例子:
[ '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']
['-'.join(('prefix', a, b)) for a, b in zip('12', 'ab')]
正如其他人提到的,您应该使用 os.path.join
作为文件路径。
第一个:['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']]
您可以使用列表理解、os.path.join
函数和 itertools
模块:
[os.path.join('home', a, b) for a, b in itertools.product(ddirs, files)]
您可以对列表使用笛卡尔积。
import itertools
for element in itertools.product(["1", "2"], ["a", "b"]):
print element
# Gives
('1', 'a')
('1', 'b')
('2', 'a')
('2', 'b')
然后随心所欲地加入他们。
要专门处理文件路径,请使用 os.path.join
:
dirs = ['dir1', 'dir2']
files = ['file1', 'file2']
[os.path.join('home', d, f) for d in dirs for f in files]