通过列表理解来组合字符串的惯用法

时间:2016-07-20 19:23:02

标签: python list-comprehension idiomatic

你能建议一种更好的方法来组合列表中的字符串吗?

以下是一个例子:

[ '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']

5 个答案:

答案 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']]