2010-01-19 112 views
2
num = list(str(1234567)) 

for n1 in num: 
    print n1 
    for n2 in reversed(num): 
     print '\t', n2 

在每次迭代中,它會打印第一個循環的第一個數字和反向循環的全部7個數字。我怎樣才能打印所有的數字,但只能打印反向循環中的最後一個數字(即第一個數字)?具有相同列表的循環內的反向循環

謝謝

回答

7

最簡單的方式就是壓縮正向和反向名單在一起:

for n1, n2 in izip(num, reversed(num)): 
    print n1, '\t', n2 
+0

整潔。我喜歡這個。 – 2010-01-19 16:41:06

+0

izip = zip和%d =%s在這裏。是的,很好的解決方案。 – 3zzy 2010-01-19 16:43:17

+2

需要'from itertools import izip',但這也適用於'zip()'。 – ezod 2010-01-19 16:43:49

1

這是一個微弱的嘗試。這是你尋找的東西嗎?

for idx,i in enumerate(x): 
    print i,"\t",x[-(idx+1)] 
+0

哦,什麼 「IDX」 的呢? *查找手冊* – 3zzy 2010-01-19 16:46:45

+1

'enumerate'返回一個元組列表,其中的每個元素都是索引(我經常縮寫爲idx)和元素。 'enumerate(「abc」)=> [(0,'a'),(1,'b'),(2,'c')]' – 2010-01-19 16:51:09

+0

哦,非常好,很高興知道這件事,謝謝! – 3zzy 2010-01-19 16:56:26

1

你的意思是這樣的嗎?

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 
+0

「num [ - (i + 1)]」是做什麼用的?爲什麼不只是「爲了我」呢? – 3zzy 2010-01-19 16:57:28

+0

'爲我在num'迭代num(觸及'num'中的每個元素)。 'num [ - (i + 1)]'是按索引查找特定元素的。 – 2010-01-19 17:03:50

+1

負指數意味着從列表末尾開始。 'i + 1'是必要的,因爲例如'num [-1]'是列表中的最後一項,但前向索引(因此'i'的值的範圍)從0開始。 在每次迭代中使用'for i in num'將使'i'等於'num'中的其中一個項目的值,而不是列表索引。 'range(len(num))'通過對比返回(基本上)'num'的索引列表。 – ezod 2010-01-19 17:06:44

0

你應該讓第二個列表:

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

無關,與Python,但在這裏它是在Haskell :)

myDie = [1,2,3,4,5,6] 
sevens = [ (x,y) | x <- myDie, y <- myDie, x+y == 7] 
+0

好的,但爲什麼奇怪的變量名? :) – 3zzy 2010-01-19 16:59:35