zip(range(len(files)), files, directories)
编辑>
嗨,
我正在学习Python,但我来自以下伪代码是典型的背景:
directories = ['directory_0', 'directory_1', 'directory_2'] files = ['file_a', 'file_b', 'file_c'] for(i = 0; i < directories.length; i++) { print (i + 1) + '. ' + directories[i] + '/' + files[i] + '\n' } # Output: # 1. directory_0/file_a # 2. directory_1/file_b # 3. directory_2/file_c
在Python中,我现在写上面的方式是这样的:
directories = ['directory_0', 'directory_1', 'directory_2'] files = ['file_a', 'file_b', 'file_c'] for i in range(len(directories)): print '%s. %s/%s' % ((i + 1), directories[i], files[i] # Output: # 1. directory_0/file_a # 2. directory_1/file_b # 3. directory_2/file_c
在阅读潜水到Python时,Mark Pilgrim说使用for循环计数器是"Visual Basic式思维"(Simple Counters).他继续展示如何使用带字典的循环,但从未真正解决过如何在其他语言中使用循环计数器的python解决方案.
我希望有人能告诉我如何在Python中正确编写上述场景.是否有可能以不同的方式做到这一点?
如果我拿出递增的行数,是否可以使用某种列表理解将两个列表匹配在一起?
例如,如果我想从输出中得到的就是这个(没有计数器,这可能与列表理解有关):
# Output: # directory_0/file_a # directory_1/file_b # directory_2/file_c
在此先感谢您的帮助.
import os.path for dir, file in zip(directories, files): print(os.path.join(dir, file)) # for directories, files
你也可以将它作为列表理解,创建字符串列表,然后打印出来]
有柜台:
for i, (dir, file) in enumerate(zip(directories, files)): print(i, os.path.join(dir, file))
试试这个:
directories = ['directory_0', 'directory_1', 'directory_2'] files = ['file_a', 'file_b', 'file_c'] for file, dir in zip(files, directories): print dir + '/' + file
为了解释,该zip()
函数将列表作为输入并返回"压缩"元组的列表.所以zip([1,2,3,4,5],[a,b,c,d,e])
会回来[(1,a),(2,b)
等等.
然后,您可以使用python for in
语法将元组的成员分配给变量.
有一百万种不同的方法来做你要求的,但上面使用了一些更"pythonic"的结构,使代码更具可读性(恕我直言,无论如何).