Обратный цикл внутри цикла с тем же списком

num = list(str(1234567))

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

На каждой итерации он печатает первую цифру из первого цикла и все 7 из обратного цикла. Как я могу напечатать не все цифры, а только последнюю (т.е. первую) цифру из обратного цикла?

Спасибо


person eozzy    schedule 19.01.2010    source источник


Ответы (5)


Самый простой способ - просто заархивировать прямой и обратный списки вместе:

for n1, n2 in zip(num, reversed(num)):
    print(n1, '\t', n2)
person wich    schedule 19.01.2010
comment
izip = zip и %d = %s здесь. Да, отличное решение. - person eozzy; 19.01.2010
comment
Нужен from itertools import izip, но это также работает только с zip(). - person ezod; 19.01.2010
comment
Я должен использовать Java, и я думаю, что то, что вы сделали, было достаточно передовой технологией. - person Rob Grant; 19.01.2010
comment
@Nimbuz, как сказал Эзод, izip от itertools. Разница в том, что это более эффективно для памяти, если у вас есть большие списки. Он не создает весь список за один раз, а генерирует его по элементам за раз. - person wich; 19.01.2010
comment
Хорошо, отлично, я даже не знал, что это существует, я думал, что это опечатка. :П - person eozzy; 19.01.2010

Вот слабая попытка. Это то, что вы ищете?

 for idx,i in enumerate(x):
     print(i,"\t",x[-(idx+1)])
person Noufal Ibrahim    schedule 19.01.2010
comment
enumerate возвращает список кортежей, каждый элемент которых является индексом (который я часто сокращаю до idx) и элементом. enumerate("abc") => [(0,'a'),(1,'b'),(2,'c')] - person Noufal Ibrahim; 19.01.2010
comment
О, здорово, приятно узнать об этом, спасибо! - person eozzy; 19.01.2010

Вы имеете в виду вот так?

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  
person ezod    schedule 19.01.2010
comment
Что делает num[-(i+1)]? а почему не только для i в num? - person eozzy; 19.01.2010
comment
for i in num перебирает num (касается каждого элемента в num). num[-(i+1)] — поиск определенного элемента по индексу. - person Noufal Ibrahim; 19.01.2010
comment
Отрицательный индекс означает начало с конца списка. i+1 необходим, потому что, например, num[-1] является последним элементом в списке, но прямая индексация (и, следовательно, диапазон значений i) начинается с 0. Использование for i in num сделает i равным значению одного из элементы в num на каждой итерации, в отличие от индекса списка. range(len(num)), напротив, возвращает (в основном) список индексов для num. - person ezod; 19.01.2010
comment
Отлично, узнал много нового из этого простого примера, всем спасибо! :) - person eozzy; 19.01.2010

Ничего общего с Python, но вот на Haskell :)

myDie  = [1,2,3,4,5,6]
sevens = [ (x,y) | x <- myDie, y <- myDie, x+y == 7]
person Rob Grant    schedule 19.01.2010
comment
Хорошо, но почему странные имена переменных? :) - person eozzy; 19.01.2010

Вы должны составить второй список:

>>> 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
person telliott99    schedule 19.01.2010