Python循环有多个列表?

时间:2009-02-06 17:42:27

标签: python arrays loops list

<编辑> 感谢迄今为止回答的所有人。 zip和os.path.join非常有用。关于如何在前面列出计数器的任何建议,不做这样的事情:

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

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:35)

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))

答案 1 :(得分:10)

试试这个:

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 <var> in <list>语法将元组的成员分配给变量。

有一百万种不同的方式来做你要求的,但上面使用了一些更“pythonic”的结构,使代码更具可读性(恕我直言,无论如何)。

答案 2 :(得分:1)

如果要在Python中为任何for循环添加计数器,可以使用enumerate()函数:

listA = ["A", "B", "C", "D", "E"]
listB = ["a", "b", "c", "d", "e"]
for i, (a, b) in enumerate(zip(listA, listB)):
    print "%d) %s, %s" % (i, a, b)

给出输出:

0) A, a
1) B, b
2) C, c
3) D, d
4) E, e

答案 3 :(得分:-1)

根据Ryan的回答,您可以这样做:

for fileDir in [dir + '/' + file for dir in directories for file in files]:
    print(fileDir)