TypeError: объект 'int' не подписывается, отображается, хотя переменная имеет тип int - PullRequest
0 голосов
/ 27 марта 2020
def solution(l):
    if 1 in l:
        l.pop(l.index(1))
        k=[[min(l)]]
        l.pop(l.index(min(l)))
        for a in l:
            for index,i in enumerate(k):
                if a%i[0]==0:
                    k[index].append(a)
                else:
                    k.append(a)
        print(k)

solution([1, 2, 3, 4, 5, 6])

Мой вывод

if a%i[0]==0:
TypeError: 'int' object is not subscriptable

Почему происходит эта ошибка? я [0] является целым числом. Я даже напечатал тип данных i [0], он говорит, что это целое число.

solution (l) берет список и составляет список чисел, которые делятся на меньшие другие числа. Для приведенного выше списка [1,2 , 3,4,5,6] я хочу список [[2,4,6], [3,6], [5]]

Любая помощь оценивается

1 Ответ

0 голосов
/ 27 марта 2020

ваша ошибка генерируется, потому что вы добавляете в свои списки списков k целое число: k[index].append(a) на первой итерации, а на второй итерации вашей второй внутренней for l oop с помощью i[0] вы делаете int_type[0]:

def solution(l):
    if 1 in l:
        l.pop(l.index(1))
        k=[[min(l)]]
        l.pop(l.index(min(l)))
        for e1, a in enumerate(l):
            for index,i in enumerate(k):
                print('outer loop ', e1, ' inner loop ', index)
                print('k = ', k)
                print('i = ', i)
                if a % i[0] == 0:
                    k[index].append(a)
                else:
                    k.append(a)
        print(k)

solution([1, 2, 3, 4, 5, 6])

вывод:

outer loop  0  inner loop  0
k =  [[2]]
i =  [2]
outer loop  0  inner loop  1
k =  [[2], 3]
i =  3
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-51-5da45c05c964> in <module>
     15         print(k)
     16 
---> 17 solution([1, 2, 3, 4, 5, 6])

<ipython-input-51-5da45c05c964> in solution(l)
      9                 print('k = ', k)
     10                 print('i = ', i)
---> 11                 if a % i[0] == 0:
     12                     k[index].append(a)
     13                 else:

TypeError: 'int' object is not subscriptable

То, как вы используете внутренний for l oop, не так, как вы должны это делать, добавляя элементы в вашем списке во время итерации могут привести к неожиданному поведению, например, итерации навсегда, и Cru sh ваша программа


решение (l) берет список и составляет список чисел, которые делится на другие меньшие числа

def solution(l):
    return [[e for e in l if i%e==0] for i in l]

solution([1, 2, 3, 4, 5, 6])

# [[1], [1, 2], [1, 3], [1, 2, 4], [1, 5], [1, 2, 3, 6]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...