#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 вещи, которые помогут:
enumerate
функция. Это вернет счетчик. Подробнее об этом: Функция перечисления- Проверив тип элемента, вы можете получить ожидаемый результат.
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
объект, он не извлекает ни одного?