Использование isinstance()
:
my_list = [True, 10.8, [1,2,3], False, True, "Hello", 12, "Sbioer", 2.5]
for i, item in enumerate(my_list):
if isinstance(item, basestring):
print i
Выход:
5
7
Однако, если вы хотите, чтобы проверить int
, вы также получите индексы индекса типа bool, потому что (цитируя текст из другого источника):
Это совершенно логично, если бы вы были рядом, когда тип bool был , добавленный в python (иногда около 2.2 или 2.3).
Перед тем, как ввести фактический тип bool, 0 и 1 были официальным представлением для значения истины, аналогично C89. Чтобы избежать ненужного нарушения неидеального, но рабочего кода, новый тип bool должен работать так же, как 0 и 1. Это выходит за пределы значения истинности, , но все интегральные операции. Никто не рекомендовал бы использовать результат boolean в числовом контексте, равно как и большинство людей не рекомендуют тестировать равенство, чтобы определить значение истины, никто не хотел искать жесткий способ, насколько существующий код является таким. Таким образом, решение сделать Истинный и ложный маскарад как 1 и 0 соответственно. Это всего лишь исторический артефакт лингвистической эволюции .
Так что, если вы хотите проверить только int
значений всего:
my_list = [True, 10.8, [1,2,3], False, True, "Hello", 12, "Sbioer", 2.5]
for i, item in enumerate(my_list):
if isinstance(item, int) and not isinstance(item, bool):
print i
'basestring' должен использоваться в Python 2.x для включения типов' str' и 'unicode'! – cdonts
Добро пожаловать! Однако это должно быть 'isinstance (item, str)' для 3.x и 'isinstance (item, basestring)' в 2.x. – cdonts
спасибо, но когда l заменить str на int, а индекс за неправильный – Sbioer