首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用多个列表的Python循环?

使用多个列表的Python循环?
EN

Stack Overflow用户
提问于 2009-02-06 17:42:27
回答 4查看 21.3K关注 0票数 15

感谢到目前为止回复的每一个人。zip和os.path.join真的很有用。任何关于如何在前面列出柜台的建议,而不是这样做:

代码语言:javascript
复制
zip(range(len(files)), files, directories)

嗨,

我正在学习Python,但我的背景是以下伪代码是典型的:

代码语言:javascript
复制
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中,我现在会这样写上面的代码:

代码语言:javascript
复制
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

在阅读Dive into Python时,Mark Pilgrim说,将for循环用于计数器是"Visual Basic风格的思考“(Simple Counters)。他继续展示了如何在字典中使用循环,但从未真正解决如何在其他语言中使用for循环计数器的python解决方案。

我希望有人能告诉我如何用Python正确地编写上面的场景。有没有可能用一种不同的方式呢?

如果我去掉递增的行数,是否可以使用某种列表理解将两个列表匹配在一起?

例如,如果我想从输出中得到这样的结果(没有计数器,这在列表理解中是可能的吗):

代码语言:javascript
复制
# Output:
# directory_0/file_a
# directory_1/file_b
# directory_2/file_c

提前感谢您的帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-06 17:49:08

代码语言:javascript
复制
import os.path
for dir, file in zip(directories, files):
    print(os.path.join(dir, file))                      # for directories, files

你也可以把它作为一种列表理解,创建字符串列表,然后打印出来]

带计数器:

代码语言:javascript
复制
for i, (dir, file) in enumerate(zip(directories, files)):
    print(i, os.path.join(dir, file))
票数 35
EN

Stack Overflow用户

发布于 2009-02-06 17:46:38

试试这个:

代码语言:javascript
复制
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“的结构来使代码更具可读性(不管怎样,是IMHO)。

票数 10
EN

Stack Overflow用户

发布于 2009-10-27 01:37:45

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

代码语言:javascript
复制
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)

给出输出:

代码语言:javascript
复制
0) A, a
1) B, b
2) C, c
3) D, d
4) E, e
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/521321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档