num = list(str(1234567))
for n1 in num:
print n1
for n2 in reversed(num):
print '\t', n2
在每次迭代中,它会打印第一个循环的第一个数字和反向循环的全部7个数字。我怎样才能打印所有的数字,但只能打印反向循环中的最后一个数字(即第一个数字)?具有相同列表的循环内的反向循环
谢谢
num = list(str(1234567))
for n1 in num:
print n1
for n2 in reversed(num):
print '\t', n2
在每次迭代中,它会打印第一个循环的第一个数字和反向循环的全部7个数字。我怎样才能打印所有的数字,但只能打印反向循环中的最后一个数字(即第一个数字)?具有相同列表的循环内的反向循环
谢谢
最简单的方式就是压缩正向和反向名单在一起:
for n1, n2 in izip(num, reversed(num)):
print n1, '\t', n2
你的意思是这样的吗?
num = list(str(1234567))
for i in range(len(num)):
print num[i], '\t', num[-(i+1)]
输出是:
1 7
2 6
3 5
4 4
5 3
6 2
7 1
“num [ - (i + 1)]”是做什么用的?为什么不只是“为了我”呢? – 3zzy 2010-01-19 16:57:28
'为我在num'迭代num(触及'num'中的每个元素)。 'num [ - (i + 1)]'是按索引查找特定元素的。 – 2010-01-19 17:03:50
负指数意味着从列表末尾开始。 'i + 1'是必要的,因为例如'num [-1]'是列表中的最后一项,但前向索引(因此'i'的值的范围)从0开始。 在每次迭代中使用'for i in num'将使'i'等于'num'中的其中一个项目的值,而不是列表索引。 'range(len(num))'通过对比返回(基本上)'num'的索引列表。 – ezod 2010-01-19 17:06:44
你应该让第二个列表:
>>> num_rev = num[:]
>>> num_rev.reverse()
>>> num_rev
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
然后执行如下操作:
>>> for n1,n2 in zip(num,num_rev):
... print n1, n2
...
0 9
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
9 0
无关,与Python,但在这里它是在Haskell :)
myDie = [1,2,3,4,5,6]
sevens = [ (x,y) | x <- myDie, y <- myDie, x+y == 7]
好的,但为什么奇怪的变量名? :) – 3zzy 2010-01-19 16:59:35
整洁。我喜欢这个。 – 2010-01-19 16:41:06
izip = zip和%d =%s在这里。是的,很好的解决方案。 – 3zzy 2010-01-19 16:43:17
需要'from itertools import izip',但这也适用于'zip()'。 – ezod 2010-01-19 16:43:49