Индекс элемента в списке - PullRequest
0 голосов
/ 09 мая 2020

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

maximum = max(lijst)
minimum = minimum(lijst)

if lijst.index(maximum) <= lijst.index(minimum):
...

Но это не дает мне желаемых индексов с такими списками:

[2, 9, 15, 36, 36, 3, 2, 36]

Теперь я хочу посмотреть на самые большие индекс минимального значения (который в данном случае равен 6) и самый маленький индекс для максимального значения (который в данном случае равен 3). Кто-нибудь знает, как найти эти индексы?

Ответы [ 4 ]

0 голосов
/ 09 мая 2020

Чтобы получить индекс первого максимума:

l.index(max(l))

Чтобы получить индекс последнего минимума, вы можете перевернуть список и применить нечто подобное:

l.reverse()
len(l)-l.index(min(l))-1
0 голосов
/ 09 мая 2020

Вам необходимо использовать функцию поиска Python. Вы можете найти последнее минимальное значение, продолжая проверку, пока find не вернет -1.

maximum = max(li)
minimum = minimum(li)

i1 = li.find(maximum)
i2 = li.find(minimum)
found = False
while(not found):
    if li.find(minimum, i2+1) != -1:
        i2 = li.find(minimum, i2+1)
    else:
        found = True

if i1 < i2:
.......
0 голосов
/ 09 мая 2020

Что вы, вероятно, имели в виду

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

my_list = [2, 9, 15, 36, 36, 3, 2, 36]
maximum = max(my_list)
minimum = min(my_list)

first_maximum_index = my_list.index(maximum)
last_minimum_index = len(my_list)-1 - my_list[::-1].index(minimum)

if first_maximum_index <= last_minimum_index:
    print("Yes!")

.index() получает индекс первого значения в списке. Итак, чтобы получить последнее минимальное значение, вам нужно перевернуть список перед использованием .index(), что является этой частью:

my_list[::-1].index(minimum)

После этого вы получите индекс минимального значения, НО это индекс обратного списка. Теперь вам нужно «перевернуть» этот индекс, вычтя количество индексов, len(my_list)-1, что даст вам окончательное выражение:

len(my_list)-1 - my_list[::-1].index(minimum)

После этого вы можете сравнить индексы, как вы это делали.

Более эффективный метод

Теперь вот более эффективное решение (хотя и более длинное и, возможно, менее читаемое). Если вы заметили, вы просматриваете список примерно 4 раза (худший случай) в приведенном выше коде. Вы можете сократить его до однократного прохождения списка:

my_list = [2, 9, 15, 36, 36, 3, 36]

# Step 1
current_min = float("inf")
current_max = float("-inf")
is_before = False

for val in my_list:
    if val > current_max:
        is_before = False
        current_max = val

    if val <= current_min:
        current_min = val
        is_before = True


if is_before:
    print("Yes!")

Уловка здесь состоит в том, чтобы подумать о подмножествах списка:

[2] # ???
[2, 9] # False
[2, 9, 15] # False
[2, 9, 15, 36] # False
[2, 9, 15, 36, 36] # False
[2, 9, 15, 36, 36, 3] # False
[2, 9, 15, 36, 36, 3, 2] # True
[2, 9, 15, 36, 36, 3, 2, 36] # True

Если вы внимательно посмотрите, результат изменится с От True до False при новом максимальном значении. Аналогичным образом результат изменяется с False на True, когда в конце списка вводится новое или существующее минимальное значение.

Они соответствуют блоку кода:

    # If value introduced is the new maximum
    if val > current_max:
        is_before = False
        current_max = val

    # If value introduced is an existing or new minimum
    if val <= current_min:
        current_min = val
        is_before = True
0 голосов
/ 09 мая 2020

вы можете вернуть минимальное / максимальное значение в списке, используя min / max, затем используйте enumerate для получения индексов, затем примените еще min / max из списка показателей, например:

my_list = [2, 9, 15, 36, 36, 3, 2, 36]    
maxval = max(my_list)

indices = [index for index, val in enumerate(my_list) if val == maxval]
[3, 4, 7]
maxIndex = max(indices)
7

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

...