Одновременный обход списка по 2 переменным - PullRequest
0 голосов
/ 02 октября 2018

Я работаю над кодом, в котором я просматриваю список, например:

a = [1,2,3,4,5,6,7,8]

Есть 8 элементов (при условии, что у 'всегда будет четное число'), и я хочу получить доступ2 за раз, означает, что цикл будет выполняться 4 раза.Каждый раз, когда переменная увеличивается на 2, как нечетные и четные числа

b =1
for i range(len(a)/2):
    print(a[2*b-1],a[2*b])
    b += 1

, на выходе будет ошибка, поскольку индекс списка начинается с 0 и заканчивается на 3, а индекс списка выходит за пределы диапазона.это не будет печатать 1 и 8, что я должен делать?

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Я думаю изменить 2*i-1 на 2*i+1.Это простой вопрос.

0 голосов
/ 02 октября 2018

Вы можете выполнять итерацию два на два, не беспокоясь об индексации, создав один итератор с iter и затем zip с самим собой.

Это похоже на *Функция 1006 * из рецептов itertools имеет преимущество в том, что может обрабатывать любые итерируемые, в том числе неиндексированные, такие как генераторы.

def iter_two_by_two(it):
    it = iter(it)
    yield from zip(it, it)

a = [1, 2, 3, 4, 5, 6, 7, 8]

for pair in iter_two_by_two(a):
    print(pair)

Вывод

(1, 2)
(3, 4)
(5, 6)
(7, 8)
0 голосов
/ 02 октября 2018

Для самой последней версии вашего кода минимальное исправление (наиболее близкое к исходному решению)

b = 0
for i in range(len(a)/2):
    print(a[2*b], a[2*b+1])
    b += 1

Лучшее решение -

for i in range(len(a)/2):
     print(a[2*i], a[2*i+1])

Для обработки даже диапазона длины используйте((len (a) + 1) / 2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...