Как увеличить на 1 или 2 в цикле for в Python - PullRequest
0 голосов
/ 05 июня 2018

Я создал этот код, который работает, но мне нужно, чтобы он был более универсальным.Посмотрите:

if (card_task_e[1] > card_task_e[2]): #Starting with 1
    ol_task_e.append(card_task_e[1])
    counte+=1
if (card_task_e[1] > card_task_e[4]):
    counte+=1
    ol_task_e.append(card_task_e[1])
if (card_task_e[1] > card_task_e[6]):
    counte+=1
    ol_task_e.append(card_task_e[1])
if (card_task_e[1] > card_task_e[8]):
    counte+=1
    ol_task_e.append(card_task_e[1])
if (card_task_e[1] > card_task_e[10]):
    counte+=1
    ol_task_e.append(card_task_e[1])
if (card_task_e[1] > card_task_e[12]):
    counte+=1
    ol_task_e.append(card_task_e[1])
if (card_task_e[3] > card_task_e[4]): #Going onto 3
    counte+=1
    ol_task_e.append(card_task_e[3])
if (card_task_e[3] > card_task_e[6]):
    counte+=1
    ol_task_e.append(card_task_e[3])
if (card_task_e[3] > card_task_e[8]):
    counte+=1
    ol_task_e.append(card_task_e[3])
if (card_task_e[3] > card_task_e[10]):
    counte+=1
    ol_task_e.append(card_task_e[3])
if (card_task_e[3] > card_task_e[12]):
    counte+=1
    ol_task_e.append(card_task_e[3])
if (card_task_e[5] > card_task_e[6]): #Going onto 5
    counte+=1
    ol_task_e.append(card_task_e[5])
if (card_task_e[5] > card_task_e[8]):
    counte+=1
    ol_task_e.append(card_task_e[5])
if (card_task_e[5] > card_task_e[10]):
    counte+=1
    ol_task_e.append(card_task_e[5])
if (card_task_e[5] > card_task_e[12]):
    counte+=1
    ol_task_e.append(card_task_e[5])
if (card_task_e[7] > card_task_e[8]): #Going onto 7
    counte+=1
    ol_task_e.append(card_task_e[7])
if (card_task_e[7] > card_task_e[10]):
    counte+=1
    ol_task_e.append(card_task_e[7])
if (card_task_e[7] > card_task_e[12]):
    counte+=1
    ol_task_e.append(card_task_e[7])
if (card_task_e[9] > card_task_e[10]): #Going onto 9
    counte+=1
    ol_task_e.append(card_task_e[9])
if (card_task_e[9] > card_task_e[12]):
    counte+=1
    ol_task_e.append(card_task_e[9])
if (card_task_e[11] > card_task_e[12]): #Finishing with 11
    counte+=1
    ol_task_e.append(card_task_e[11])

Как видите, у меня много условий if, и я чувствую, что это может быть более эффективным, если я добавлю цикл for, но я действительно не уверен, какчтобы сделать это в Python.

Только примечание, длина массива "card_task_e" может измениться от 0 до 50.

Если кто-то может помочьмне, как сделать это лучше для циклов, я был бы очень признателен.

Ответы [ 5 ]

0 голосов
/ 06 июня 2018

Это будет работать для любой длины card_task_e.

Сначала мы перебираем нечетные целые числа от 1 до длины.Внутри этого мы зацикливаемся между четными целыми числами, начиная с текущего нечетного индекса.Трейлинг 2 в каждом цикле for указывает циклу увеличиваться на 2 в каждой итерации цикла.

list_size = len(card_task_e)
for odd_index in range(1, list_size, 2):
    for even_index in range(odd_index + 1, list_size, 2):
        ol_task_e.append(card_task_e[odd_index])
        counte += 1
0 голосов
/ 06 июня 2018

Ха-ха, предполагается, что проверено, больше ли первое значение массива, чем остальные четные индексы в массиве.- А. Бхатнагар

Почему бы просто не протестировать его с использованием списка-среза?

a = [16,1,2,3,4,5,6,7,8,9]
print ( a[0] > max ( a[2::2] ) ) # prints True

a = [16,1,2,3,4,5,6,7,8,9,22]
print ( a[0] > max ( a[2::2] ) ) # prints False

a[2::2] начинается со 2-го элемента a и занимает каждый 2-й довсе кончено.max(..) вычисляет самый большой из них и a[0] > max(..) проверяет, больше ли элемент fist элемента a, чем все остальные четные значения в этом списке.

0 голосов
/ 06 июня 2018

Для этого вам понадобятся вложенные циклы.

for a in range(1,12,2):
    for b in range(a+1,13,2):
        if card_task_e[a] > card_task_e[b]:
            ol_task_e.append(card_task_e[a])
            counte += 1
0 голосов
/ 06 июня 2018

Не проверено, но некоторые варианты этого будут работать; -)

n = len(card_task_e)
for i in range(1, n, 2):
    base = card_task_e[i]
    for j in range(i+1, n, 2):
        if base > card_task_e[j]:
            counte += 1
            ol_task_e.append(base)
0 голосов
/ 06 июня 2018

Вы можете ссылаться на конкретный элемент списка, используя счетчик, который увеличивается на 2 за каждый проход цикла for.

counter = 0
for ____ in ____:
    counter += 2
    <do something to> some_list[counter]

Вы также можете добавить операторы if в цикл, чтобы диктоватькак счетчик увеличивается.

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