Получение индексов определенных элементов из списка Python - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть список с маленькими и большими числами, подобный этому:

[234, 454, 123444, 123, 234, 122234, 234, 354, 654, 123231, 234, 342, 1231231]

"Большие числа" как минимум в 10 раз больше, чем меньшие числа.Всего в списке 4 "больших числа": 123444, 122234, 123231 и 1231231.

Я хочу найти индексы 3-го и 4-го "больших чисел"":

values: 234 454 123444 123 234 122234 234 354 654 <strong>123231</strong> 234 342 <strong>1231231</strong> indices: 0 1 2 3 4 5 6 7 8 <strong>9</strong> 10 11 <strong>12</strong>

Как видите, третье" большое число "имеет индекс 9, а четвертое" большое число "имеет индекс 12. Следовательно, вывод должен быть9 и 12.

Ответы [ 5 ]

0 голосов
/ 27 сентября 2018

Сортировка здесь не годится, поскольку если длинное значение появляется перед меньшим значением, то порядок уничтожается, как в этом примере (123444 > 123231).Вместо этого с помощью enumerate найдите элементы, которые в 10 раз превышают значения других элементов, и добавьте их индекс в новый список в порядке их появления, а затем возьмите 3-й и 4-й элементы нового списка, содержащего индексы

longs = []
j = min(l)

for idx, item in enumerate(l):
    if item/10 > j:
        longs.append(idx)

print(*longs[2:])

Или понимание списка

longs = [idx for idx, item in enumerate(l) if item/10 > j]
9 12
0 голосов
/ 27 сентября 2018
list = [234, 454, 123444, 123, 234, 122234, 234, 354, 654, 123231, 234, 342, 1231231]
print (list)
list.sort()
print (list)
my_len = len(list)
print (my_len)
print ("The longest ones are at the end")
print (list[my_len-1])
print (list[my_len-2])
# output
# [234, 454, 123444, 123, 234, 122234, 234, 354, 654, 123231, 234, 342, 1231231]
# [123, 234, 234, 234, 234, 342, 354, 454, 654, 122234, 123231, 123444, 1231231]
# 13
# The longest ones are at the end
# 1231231
# 123444

# Ok how about this 

list = [234, 454, 123444, 123, 234, 122234, 234, 354, 654, 123231, 234, 342, 1231231]
print (list)
my_new_list = []
for idx, val in enumerate(list):
    print(idx, val)
    my_new_list.append((idx,val))
    print(my_new_list)
# output
#[234, 454, 123444, 123, 234, 122234, 234, 354, 654, 123231, 234, 
#342, 1231231]
#0 234
#1 454
#2 123444
#3 123
#4 234
#5 122234
#6 234
#7 354
#8 654
#9 123231
#10 234
#11 342
#12 1231231
#[(0, 234), (1, 454), (2, 123444), (3, 123), (4, 234), (5, 122234), 
#(6, 234), (7, 354), (8, 654), (9, 123231), (10, 234), (11, 342), 
#(12, 1231231)]
0 голосов
/ 27 сентября 2018

Один из способов добиться этого - найти точку перегиба в значениях в списке.Это может быть сделано с использованием порогового коэффициента для того же.

Например:

def inflection_index(a, threshold=10):
    a.sort()

    current = 0
    for next in range(1, len(a)):
        if a[next] >= threshold * a[current]:
            return i
        current += 1

    return None

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

0 голосов
/ 27 сентября 2018

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

num = [234, 454, 123444, 123, 234, 122234, 234, 354, 654, 123231, 234, 342, 1231231]

temp = sorted(num)

for i in temp[::-1][:2]:
    print("Index of", i, "is:", num.index(i))

Результат:

Index of 1231231 is: 12
Index of 123444 is: 2
0 голосов
/ 27 сентября 2018

Сначала вы можете отсортировать элементы.Затем для каждого из самых крупных элементов найдите его индекс в исходном списке.Вы должны выглядеть так:

original_list = [...]
sorted_list = original_list.sort()
1st_largest_index = original_list.index(sorted_list[-1])
2nd_largest_index = original_list.index(sorted_list[-2])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...