#python
#python
Вопрос:
def list_gen(a,b,c,d):
print(a,b,c,d)
l=[]
for i in range(a,b):
for j in range(c,d):
l.append(d[i,j])
return l
Когда я передаю аргументы функции list_gen(0,3,0,3), я получаю сообщение об ошибке ниже:
TypeError Traceback (most recent call last)
<ipython-input-51-ac343943d448> in <module>()
----> 1 list_gen(0,3,0,3)
<ipython-input-49-afc3d3a347a9> in list_gen(a, b, c, d)
4 for i in range(a,b):
5 for j in range(c,d):
----> 6 l.append(d[i,j])
7 return l
TypeError: 'int' object is not subscriptable
Но этот код работает без каких-либо проблем. Кто-нибудь может сказать, в чем здесь ошибка?
for i in range(0,3):
for j in range(0,3):
print(d[i,j])
Комментарии:
1.
d
это число3
. Чтоd[i,j]
предполагается означать?2. Когда вы вызываете его как list_gen(0,3,0,3), d получает значение 3. Который является целым числом. Я полагаю, вы хотите сделать что-то еще.
3. Используя
d
в качестве переменной в вашем цикле, вы заменили оригинал,d
который, похоже, былdict
. Используйте разные имена переменных.
Ответ №1:
По-видимому, у вас есть глобальная переменная d
, содержащая dict, к которой вы хотите получить доступ. Но вы использовали d
в качестве имени параметра функции, так что это скрывает глобальное имя. При использовании d[i,j]
он пытается проиндексировать число 3
, что невозможно.
Решение состоит в том, чтобы использовать другую переменную для параметра функции.
def list_gen(a,b,c,e):
print(a,b,c,e)
l=[]
for i in range(a,b):
for j in range(c,e):
l.append(d[i,j])
return l
Вы будете реже сталкиваться с подобными проблемами, если будете использовать более подробные, значимые имена переменных, чем d
.
Ответ №2:
Параметр в диапазоне должен быть целым числом, и поскольку for j in range(c,d):
ошибка не выдала ошибку, это означает, что d равно int, и вы не можете ссылаться на int, используя d [i, j] в строке l.append(d[i,j])
. Вероятно, у вас есть переменная с именем d, область действия которой активна во время выполнения инструкции print.