Как найти количество элементов между 2 одинаковыми элементами в списке python

#python

#питон

Вопрос:

У меня есть список python:

 l1=[7,1,3,4,1,7,6]  

Как я могу найти количество товаров между одним и тем же товаром?

Например ,количество элементов между 7 равно 4,а количество элементов между 1 равно 2

Комментарии:

1. Вам это нужно для одного номера или для каждого номера в списке?

2. для каждого числа

3. что делать, если число появляется 3 раза?

Ответ №1:

 l1=[7,1,3,4,1,7,6,3]  chosen_number = 3 number_indexes = [i for i, j in enumerate(l1) if j == chosen_number] items_in_between = max(number_indexes) - min(number_indexes) - 1  print(items_in_between)  

Ответ №2:

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

 def count_(array_int,element):  position1 = array_int.index(element)   1   return array_int.index(element,position1) - position1   

Комментарии:

1. index принимает начальный аргумент, который был бы лучше, чем нарезка.

2. спасибо, я этого не знал, я обновил свой ответ.

Ответ №3:

ниже приведен код, который просит пользователя ввести номер и указать, есть ли в списке несколько выбранных номеров. Я также дал команды ( # ), которым вы должны следовать, чтобы понять мой код.

 l1=[7,1,3,4,1,7,6,3]  number_chosen = int(input('Input the number that you want to check -gt; ')) def gap_between_duplicate(num):  ### Find the index of the number  index = [i for i, j in enumerate(l1) if j == num]  ### Calculate the gap between the numbers  gap = max(index) - min(index) -1  ### If else function to provide the output  if gap == -1:  return f'There is only 1 of the selected number in the list'  return f'There are {gap} amount of number between the numbers {num}.' print(gap_between_duplicate(number_chosen))  

Ответ №4:

Вот мое O(n) предварительное вычисление и O(1) получение результата для конкретного числового решения. Требуется дополнительная O(n) память.

Это решение будет подсчитывать элементы с первого появления до последнего (если их более 2). Если есть только одно вхождение числа, -1 будет возвращено.

 l1=[7,1,3,4,1,7,6]  res = {}  for i in range(len(l1)):  e = l1[i]  if e in res:  start, end = res[e]  res[e] = (start, i)  else:  res[e] = (i, i)  print(res[7][1] - res[7][0] - 1) # 4