Определение того, больше ли значение в списке, чем элемент под ним - PullRequest
3 голосов
/ 19 июня 2020

Я искал решение для этого некоторое время, и, хотя у меня есть фрагменты понимания, я не могу заставить его работать так, как ожидалось. Я надеюсь, что смогу получить некоторое представление:

Итак, у меня есть список, содержащий числа:

refl = ["100", "99", "90", "80", "60", "50", "10"]

Я хочу узнать, больше ли первый элемент, чем второй, если второй больше третьего, третий больше четвертого et c.

Думаю, я борюсь с тем, как захватить начальный объект списка, чтобы сравнить его со следующим ...?

Любая помощь будет принята с благодарностью,

* *** ИЗМЕНИТЬ ДЛЯ ДОБАВЛЕНИЯ ФУНКЦИИ *****

У меня есть следующая функция:

refl = ["100", "99", "90", "80", "60", "50", "10"]

def funcc(refl):
    if (refl[0]) > (refl[1]):
        print("more")
    else:
        print("less")

Как мне заставить функцию запускать каждый объект в списке без неявного указания if [1]> [2], [2]> [3] et c

Большое спасибо,

Ответы [ 5 ]

1 голос
/ 19 июня 2020

Это ваш существующий код:

def funcc(refl):
    if (refl[0]) > (refl[1]):
        print("more") 
    else:
        print("less")

Ваша проблема в том, что вы сравниваете только первый (refl[0]) и второй (refl[1]) элементы. Тривиальное исправление:

def funcc(refl):
    for i in range(len(refl)) - 1:
        if (refl[i + 1]) >= (refl[i]):
            return False
    return True

, затем используйте его следующим образом:

refl = ["100", "99", "90", "80", "60", "50", "10"]
if funcc(refl):
    print("Monotone decreasing")
else:
    print("Not monotone decreasing")
1 голос
/ 19 июня 2020

Вы можете zip() разделить список на пары, а затем проверить, больше ли первый элемент из каждой пары, чем второй. Я предполагаю, что вам нужны здесь целочисленные сравнения. Если нет, вы можете удалить приведенные типы int(), которые будут сравнивать строки лексикографически, используя их соответствующие значения ASCII.

Затем вы можете использовать all(), чтобы проверить, удовлетворяет ли каждая пара этому условию.

>>> refl = ["100", "99", "90", "80", "60", "50", "10"]
>>> all(int(fst) > int(snd) for fst, snd in zip(refl, refl[1:]))
True

Если вы просто хотите получить логический результат каждого сравнения, вы можете использовать понимание списка :

>>> [int(fst) > int(snd) for fst, snd in zip(refl, refl[1:])]
[True, True, True, True, True, True]
0 голосов
/ 19 июня 2020

refl = [«100», «99», «90», «80», «60», «50», «10»]

def procedure(refl): 
    for count in range(len(ref1)):
        if (refl[count]) > (refl[count+1]): 
            print("more") 
        else: 
            print("less")
procedure(ref1)

len (ref1) будет повторять l oop n раз, где n - количество элементов в # # списке.

0 голосов
/ 19 июня 2020

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

refl = list(map(int, refl))

затем логическое AND все для сравнения greater первые n-1 элементы с последними n -1 шт.

result = all(map(int.__gt__, refl[:-1], refl[1:]))
0 голосов
/ 19 июня 2020

Ваша переменная refl - это список, и вы можете ссылаться на каждый элемент в списке, используя целочисленный индекс. Вы можете использовать эти индексы для сравнения значений и некоторое время l oop для автоматического сравнения каждой пары элементов. Для этого вам сначала нужно настроить l oop для посещения каждого элемента в списке, останавливаясь на один элемент меньше последнего, поскольку вы будете сравнивать один элемент вперед.

refl = ["100", "99", "90", "80", "60", "50", "10"]
counter = 0
while counter < len(refl)-1: #remember, the length of the list is 7, the last index is 6
    if refl[counter] < refl[counter+1]: #if the item smaller than the next item
        print("The previous item is not larger")
    else:
        print("the previous item is larger")
    counter += 1 #add one to counter and re-assign
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...