Найдите положение определенного числа, которое появляется первым в списке [python] - PullRequest
1 голос
/ 23 января 2011

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

Пример: скажи, что я хочу 3

     s = [1,2,3,4,5,3,9,8]  => s[2] appears first

Ответы [ 7 ]

4 голосов
/ 23 января 2011
def first_dup( seq ):
    # keep track of the positions
    seen = {}
    for pos,item in enumerate(seq):
        if item in seen:
            # saw it before, so its a duplicate
            return seen[item]
        else:
            # first time we see it, store the pos
            seen[item] = pos
1 голос
/ 23 января 2011

Если я не понимаю ваш вопрос, это должно сработать:

s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 3]
for i in range(len(s)):
    if s.count(s[i]) > 1:
        return i

Это должно дать вам индекс первого вхождения первого элемента, который появляется несколько раз в списке

Если это не то, что вам нужно, оставьте комментарий, и я отредактирую код.

1 голос
/ 23 января 2011

Немного неоднозначный вопрос.

Если вы просто хотите найти индекс первого появления определенного элемента, вам следует использовать list.index () метод:

index = s.index(3)

Но если вы

хочу найти появившееся число более одного раза в списке

в целом (без указания значения элемента), кажется, вы можете

  • либо выполните простой O (N ^ 2) поиск в массиве (проверяйте все элементы списка для каждого элемента, пока не будет найдено дублирование)
  • или выполните сортировку, найдите дублированный элемент в отсортированном списке и затем найдите индекс дублированного элемента в исходном массиве с помощью метода list.index () - это займет O (N * log (N)) из-за сортировки.
0 голосов
/ 23 января 2011

Еще один способ сделать это:

from operator import countOf

def multindex(seq):
    """ find index of first value occurring more than once
        in a sequence, else raise ValueError if there aren't any
    """
    for i,v in enumerate(seq):
        if countOf(seq, v) > 1:
            return i
    else:
        raise ValueError

print 's[{}] is first value in the list occurring more than once'.format(multindex(s))
# s[2] is first value in the list occurring more than once
0 голосов
/ 23 января 2011

Это еще один способ сделать это ..

Если присутствует, он вернет первый индекс. Если нет доступных дубликатов, он вызовет IndexError.

[s.index(_) for _ in s if s.count(_) > 1][0]
0 голосов
/ 23 января 2011

Функция ниже возвращает индекс первого появления дубликата

def find_first_duplicate(num_list):
        track_list =[]
        index = 0
        for e in num_list:
            if(e not in track_list):
                track_list += [e]
            else: ## found!
                return index
            index += 1
0 голосов
/ 23 января 2011
s.index(3)

вернет 2, как вы пожелаете.

index повысит ValueError, если указанного элемента нет в списке.

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