Почему список Python не имеет уникального индекса для смежных дублирующихся элементов? - PullRequest
0 голосов
/ 14 апреля 2019

Я хранил список с элементами [0, 1, 2, 3, 4, 4]. Когда я итерировал его и печатал индекс каждого элемента, мой вывод был примерно таким:

0
1
2
3
4
4

Я просто подумал, что если он печатает только элементы, поэтому я попробовал еще один ввод [1,2,3,4,5,6,7], и на этот раз я получил правильные индексы, такие как

0
1
2
3
4
5
6

Почему это происходит и как я могу это решить?

n=input()

l=list(input().split())

print(l)

for i in l:
      print(l.index(i))

Ожидаемый результат:

0
1
2
3
4
5

Фактический объем производства:

0
1
2
3
4
4

Ответы [ 3 ]

0 голосов
/ 14 апреля 2019

list_name.index (i) возвращает первый индекс вхождения этого элемента
Так что, если ваш список был: [1,2,3,4,5,6,5]
И вы распечатали l.index(i) путем итерации, выходной результат будет.
0 1 2 3 4 5 4
Поскольку 5 имеет первое вхождение в позиции 4 в списке.

0 голосов
/ 14 апреля 2019

Используйте enumerate (), если вы хотите получить положение элементов в списке.

Или, если вы хотите просто напечатать значения:

for i in l:
    print(i)

Документация:

https://docs.python.org/3/tutorial/datastructures.html?highlight=list%20index

list.index (x [, start [, end]])

Возвращает нулевой индекс в списке первого элемента , значение которого равно х. Вызывает ошибку ValueError, если такого элемента нет.

https://docs.python.org/3/library/functions.html#enumerate

перечислить (итерируемый, начало = 0)

Вернуть перечисляемый объект. итерируемый должен быть последовательностью, итератором, или некоторый другой объект, который поддерживает итерацию. Метод next () итератора, возвращаемого enumerate (), возвращает кортеж, содержащий count (от начала, который по умолчанию равен 0) и значения, полученные из перебор повторяется.

0 голосов
/ 14 апреля 2019

Индекс не работает так, как вы ожидаете

.index() не возвращает вам индекс элемента в массиве, он возвращает вам первый индекс или местоположение значения (см. this ).

В вашем коде

l = [0, 1, 2, 3, 4, 4]

for i in l:
      print(l.index(i)) #i is the value itself

В действительности происходит то, что каждый раз, когда он ищет первое вхождениезначение i.В списке l = [0, 1, 2, 3, 4, 4], когда вы достигаете последних 4, вы фактически запрашиваете у Python «первое вхождение 4 в списке l», поэтому python выдает «index» 4.

В JavaScript это будет эквивалент array.indexOf(val).

То, что вы ищете: перечисление функция

for ind, val in enumerate(l):
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...