Python中的双重循环

8
我正在尝试按顺序获取文件名列表。类似以下格式:
files-1-loop-21
files-1-loop-22
files-1-loop-23
files-1-loop-24
files-2-loop-21
files-2-loop-22
files-2-loop-23
.
.
.
and so on

关于测试,我已经编写了以下python代码:

代码示例_1:

for md in range(1,5):
   for pico in range(21,25):
      print md, pico

它会给我一对数字,例如:
  `1 21
   1 22
   1 23
   1 24
   2 21
   2 22
   2 23
   2 24
   3 21
   3 22
   3 23
   3 24
   4 21
   4 22
   4 23
   4 24

如果我使用:

代码示例_2:

 for md in range(1,5):
   for pico in range(21,25):
  print "file-md-loop-pico"

我明白了

  files-md-loop-pico
  files-md-loop-pico
  files-md-loop-pico
  files-md-loop-pico
  files-md-loop-pico
  files-md-loop-pico
  files-md-loop-pico

如何修改(代码示例_2)以在Python中按照我想要的方式获取文件列表(如本帖子开头所示)?

提前致谢。

敬礼

7个回答

18

试一下这个:

for md in range(1,5):
   for pico in range(21,25):
      print "file-{0}-loop-{1}".format(md, pico)

或者:
from itertools import product
for md, pico in product(range(1,5), range(21,25)):
    print "file-{0}-loop-{1}".format(md, pico)

2
使用字符串格式化。
print 'file-{0}-loop-{1}'.format(md, pico)

假设我有三个循环,我可以使用以下方式(print "files-{0}-loop-{1}-varies-{2}".format(md,pico,jay))吗?这是否可能解释一下{0}和{1}的含义? - Vijay
1
@Vijay 当然可以,这些数字是对应 format 中要包含在括号中的参数。 - Volatility

2
Python的作用域由缩进确定。您的内部代码必须正确缩进:
for md in range(1,5):
    for pico in range(21,25):
        print "file-md-loop-pico"

2)您正在使用字符串字面量"file-md-loop-pico",而不是插入变量mdpico。要正确格式化字符串, 请使用:

for md in range(1,5):
    for pico in range(21,25):
        print "file-{0}-loop-{1}".format(md, pico)

1
考虑到输出结果,缩进不太可能是问题的原因;最有可能的情况是 OP 只是错误地格式化了 SO 帖子而不是实际代码。 - Wooble

2

一行代码:

print '\n'.join([('files-%d-loop_%d' %(i, j)) for i in xrange(1,5) for j in xrange(21,25)])

1

在其他答案中提供的解决方案,使用{}括起来的参数是正确的现代方法。

print'file-{0}-loop-{1}'.format{md,poco)

有一种更老的方法可以做到这一点,如果您熟悉c或c++ sprintf,则可能更容易理解。

print'file-%d-loop-%d'%(md,poco)

文档:http://docs.python.org/2/tutorial/inputoutput.html

你仍然需要打印结果,这只是如何格式化字符串。 - Peter Wooster
我已经添加了打印语句,父级不再需要。 - Peter Wooster

0
这将轻松解决问题:
代码:
for md in range(1,5):
       for pico in range(21,25):

            print "file-%d-loop-%d"%(md,pico)

输出:

file-1-loop-21
file-1-loop-22
file-1-loop-23
file-1-loop-24
file-2-loop-21
file-2-loop-22
file-2-loop-23
file-2-loop-24
file-3-loop-21
file-3-loop-22
file-3-loop-23
file-3-loop-24
file-4-loop-21
file-4-loop-22
file-4-loop-23
file-4-loop-24

0
for md in range(1,5,1):
  for pico in range(21,25,1):
     print ("file-" + str(md) +"-loop-" + str(pico) )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接