2012-01-04 16 views
-4

Я пытаюсь просмотреть программу внутри нескольких списков, чтобы увидеть, есть ли в этих списках несколько целых чисел. Я получил ответ по предыдущему вопросу, который я попросил выполнить эту задачу. Однако с этим ответом возникла проблема, и я не могу понять, что это такое.TypeError: объект 'int' не является итерабельным

Вот код:

def all_num_in_list(d, numbers): 
    for n in numbers: 
     if n not in d: 
      return False 
    return True 
def all_num_in_any_list(lists, numbers): 
    for d in lists: 
     if all_num_in_list(d, numbers): 
      return True 
    return False 
while a: 
    try: 
     for c, row in enumerate(matrix): 
      if 0 in row: 
       print("Found 0 on row:", c, "index:", row.index(0)) 
       if 1 not in row: 
        if all(row[row.index(0)] != 1 for row in matrix): 
         if all_num_in_any_list([2, 3, 4, 5, 6, 7, 8, 9], [row, box1, all(row[row.index(0)])]): 
         if all(row[row.index(0)] != 1 for row in matrix): 
          print ("t") 

ошибка, что она рисует это:

if all_num_in_any_list([2, 3, 4, 5, 6, 7, 8, 9], [row, box1, all(row[row.index(0)])]): 
TypeError: 'int' object is not iterable 

Почему это происходит, как это может избежать, и что именно этот код делает?

Благодаря

+0

У вас есть целое число, в противном случае вы ожидаете иначе. Итак, какое значение (переменная)? –

+0

hess !! это какой-то неприятный вложенный код python – wim

+0

-1 Вы должны были включить трассировку и больше кода. Теперь вы задали столько вопросов, вы должны это знать. –

ответ

0

all_num_in_any_list extacts элементы из списков, которые в данном случае являются все целые числа; то он передает каждое целое число в all_num_in_list, который ожидает список вместо этого.

+0

Итак, что я могу сделать? – chingchong

+0

@chingchong: вы можете передать список списков, в которых вы сейчас проходите список, как вам сказали несколько человек. –

+0

Никто не сказал мне, что на самом деле должно быть одним из твоих заблуждений. – chingchong

2

Первый параметр для all_num_in_any_list, [2,3,4,5,6,7,8,9], представляет собой единственный список, а не список списков . Когда вы повторяете его, d равно 1, тогда d равно 2 и так далее. Когда вы передаете d в качестве первого параметра для all_num_in_list, он пытается рассматривать его как список, хотя он является целым числом.

+0

Как я могу это исправить? – chingchong

+0

Две функции all_num_in_list и all_num_in_any_list являются правильными, но цикл «while», вероятно, довольно сломан. Это не ясно, что он пытается сделать. Что касается all_num_in_any_list, список чисел - это второй параметр, список списков - это первый параметр. Следующее будет работать: all_num_in_any_list ([[1,2,3], [4,5,6]], [1,3]) – Jim

+0

Предполагается, что он ищет по этим спискам: row, box1 и all (row [row.index (0)], чтобы найти числа 2 - 9. Цифры можно найти где угодно в любом из списков и не обязательно, чтобы все были в одном списке. Так что если сказать, что 3, 5, 7, один и 2, 4, 6 были в другом, а 8, 9 были в последнем из них. – chingchong

0

Заявление for n in numbers в этом коде является причиной проблемы

def all_num_in_list(d, numbers):  
    for n in numbers:   
     if n not in d:    
      return False  
    return True 

Частичное Traceback является

if n not in d 
def all_num_in_list(d, numbers): 
def all_num_in_any_list(lists, numbers): 
if all_num_in_any_list([2, 3, 4, 5, 6, 7, 8, 9], [row, box1, all(row[row.index(0)])]):   
TypeError: 'int' object is not iterable 

Таким образом, в функции all_num_in_any_list вы уже переборе for d in lists над списком lists, чтобы получить целые числа, которые есть перешел на all_num_in_list. Но вот при попытке сравнить n с атомом d, где Ошибка произошла.

Think Over?

Вы намерены сделать целочисленное сравнение, например n != d, а не if n not in d .

Примечание ::: В следующий раз, пожалуйста, выкладываю полный TraceBack

+0

Я опубликовал полную трассу. Я не знаю точно, что этот код должен делать, поскольку человек, который ответил на мой последний вопрос с помощью этого кода, не сказал бы мне. Я пытаюсь изучить Python, поэтому я не знаю все эти вещи. Конечной целью этого кода было сделать оператор if, который выполнялся, если несколько номеров были найдены в любом из трех списков. Они могут быть объединены повсюду, поэтому они не все должны быть из одного списка. Вот последний вопрос: http://stackoverflow.com/questions/8682104/search-through-multiple-lists Спасибо за помощь. – chingchong

+0

@chingchong: Нет, вы не опубликовали полную трассу. Сообщение об ошибке не является трассировкой. –

+0

О, извините, это была вся информация, которую я получил. – chingchong

2

Вот ваша матрица, от ранее вопрос

matrix = [ 
    [0, 0, 0, 5, 0, 0, 0, 0, 6], 
    [8, 0, 0, 0, 4, 7, 5, 0, 3], 
    [0, 5, 0, 0, 0, 3, 0, 0, 0], 
    [0, 7, 0, 8, 0, 0, 0, 0, 9], 
    [0, 0, 0, 0, 1, 0, 0, 0, 0], 
    [9, 0, 0, 0, 0, 4, 0, 2, 0], 
    [0, 0, 0, 9, 0, 0, 0, 1, 0], 
    [7, 0, 8, 3, 2, 0, 0, 0, 5], 
    [3, 0, 0, 0, 0, 8, 0, 0, 0], 
    ] 

А вот методы:

def all_num_in_list(d, numbers): 
    for n in numbers: 
     if n not in d: 
      return False 
    return True 

def all_num_in_any_list(lists, numbers): 
    for d in lists: 
     if all_num_in_list(d, numbers): 
      return True 
    return False 

И С вы в более раннем вопросе использовали числа, 3,5 и 6 в качестве примеров для просмотра, вот как вы проверяете, находятся ли эти числа в приведенной выше матрице:

all_num_in_any_list(matrix, [3, 5, 6]) 

который будет возвращать False, так как ни один из списков в списке списков будет иметь все эти числа деревьев, в то время как, например:

all_num_in_any_list(matrix, [0, 1, 9]) 

вернется Правда, как есть список, который включает в себя эти числа.

+0

Ну, я уже знал всю информацию, которую вы мне дали. Я понятия не имею, почему вы смотрите на более ранние вопросы, о которых я спрашиваю о совершенно разных вещах, но вы это сделали. И мне это совсем не помогло. Единственное, что я хочу, это знать, как исправить свой код, чтобы он не вытащил ошибку. мне не нужно, чтобы вы копировали и вставляли старые вопросы и ответы, потому что я, очевидно, уже их знаю. Если бы вы могли просто ответить на мой вопрос, я был бы очень доволен. Благодарю. – chingchong

+0

Я сдаюсь. Ваша ранняя самооценка кажется абсолютно точной. –

+0

Я мог бы это сделать раньше. Я не хочу искать «матрицу». Это не то, что я пытаюсь сделать! Я хочу выполнить поиск по нескольким спискам! Думаю, я сделал это совершенно ясно для вас. Несколько раз в нашем разговоре, и даже в вашем собственном ответе, вы сказали, что сделали то, что я хотел. Но теперь, сказав, что я должен искать матрицу! Это возмутительно. Вы действуете так, как будто вы иммануил, и сделали все так хорошо, но вы просто солгали мне! – chingchong

Смежные вопросы