Как мне получить фактическое положение объекта в списке

#python #list

Вопрос:

Как мне получить фактическое положение объекта в списке?

 my_list = [0, 0, 2, 4, 5, 2, 0, False, 0]

for i in my_list:
    if i == False:
        print('my list:', my_list, 'object:', i, 'At Position', my_list.index(i))
 

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

1. ваш код работает не так, как ожидалось?

2. Хммм… это выборка всех индексов 0

Ответ №1:

В вашем случае проверки равенства недостаточно. В Python запуск 0 == False возвращается True . Это усугубляется тем фактом, что ваш список содержит элементы объектов разных типов и 0 находится в начале вашего списка. Итак, если вы хотите найти False здесь, вам также следует проверить тип элемента:

 my_list = [0, 0, 2, 4, 5, 2, 0, False, 0]

for idx,i in enumerate(my_list):
    if type(i) is bool and i == False:
        print('my list:', my_list, 'object:', i, 'At Position', idx)
 

Выход:

 my list: [0, 0, 2, 4, 5, 2, 0, False, 0] object: False At Position 7
 

Редактировать:

Как указано ниже, False o11c предоставляет специальный сценарий, в котором допустимо использование is для проверки его равенства здесь, поскольку False это один из немногих встроенных синглетов в Python. Поэтому if i is False будет работать для условного оператора:

 if i is False:
    print('my list:', my_list, 'object:', i, 'At Position', idx)
 

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

1. или просто is False потому, что бул-синглтон. Ну что ж, дублтон.

2. @o11c Я думаю, что это хороший момент. Однако это не сработает наоборот, не так ли? Например, найти числовые элементы (скажем, 0), пока False они находятся в списке. Но в данном случае это определенно чистое питоновское решение.

Ответ №2:

Хорошо, 2 вещи, которые помогут:

  1. enumerate функция. Это вернет счетчик. Подробнее об этом: Функция перечисления
  2. Проверив тип элемента, вы можете получить ожидаемый результат. False Значение фактически выражается через 0 . Итак, все 0 напечатаны. Кроме того, первое появление 0 находится в индексе 0 . Итак, каждый раз это печатается. type() получит тип данных элемента. Так type(i) is bool как означает, если это так True/False . Это даст вам результат.
 for i,j in enumerate(my_list):
    if j == False and type(j) is bool:
        print('my list:', my_list, 'object:', j, 'At Position', i)
 

Вы также можете использовать if j is False: в качестве boolean одиночного.

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

1. Вы уверены my_list.index(j) , что это правильно? i В случае с ОП это не вернется.

2. код не получает фактическое положение всех ЛОЖНЫХ объектов

3. О, Спасибо! @MZ, я отредактировал свой ответ. Это должно быть print('my list:', my_list, 'object:', j, 'At Position', i)

4. код, не извлекающий все ЛОЖНЫЕ позиции объектов в списке

5. @Seun у вас есть только один False объект, он не извлекает ни одного?