2013-04-12 6 views
0

это код, который я написал, чтобы дать результат расширенного поиска для некоторых подканалов, которые имеют там атрибуты и значения атрибутов, каждый в другой таблице дает мне эту ошибку: индекс списка вне диапазона по строке 35Индекс расширенного поиска индекса за пределами диапазона

sub_id = request.GET['sub_ch_id'] 
attributes = Attribute.objects.filter(subchannel_id = sub_id) 
values =[] 
print "attributes" 
# print request 
post = [] 
value_obj =[] 
for w in attributes: 
    name = w.name 
    print request.GET[name] 
    values.append(request.GET[name]) 
result_search_obj = [] 
flag = False 
result_search = [] 
result = [] 
post = [] 
i = 0 
f = i+1 
# post_temp = "" 

# print "HIIIIII", len(result_search_obj) 
for j in range(0,len(attributes)): 
    # print 'EREEEEEEE' 
    result_search_obj+=(Value.objects.filter(attribute_id = attributes[j].id 
     , value = values[j])) 
    # print '1st loop'  
for k in range(0,len(result_search_obj)): 
    # print '2 loop' 
    for l in range(0,len(result_search_obj)): 

     result_search[k].append(result_search_obj[k].Post_id) 
     # print '4 loop' 
for a in range(0,len(result_search)): 

    result_search.sort(len(result_search[k])) 
    # print '6 loop' 
for h in range(0,len(result_search)): 

    post_temp = "" 
    # print '3 loop' 
    for g in result_search[h]: 
     tmp=result_search[h] 
     loc = temp[g] 
     if loc == result_search[h+1][g]: 
      flag = True 
      post_temp = tmp[g] 
      break 
    post = post_temp 
print post 

return HttpResponse('filter_post_channel.html', {'posts' : post}) 
+0

Это правильный отступ для кода? – halex

+2

Это помогло бы, если бы вы указали, что такое строка 35. Но вот ключ: в любое время, когда вы делаете 'range (len (something))' в Python, вы делаете это неправильно. –

+0

@ Даниэль Роземан - Почему? – atomh33ls

ответ

0

Похоже, вы предполагаете, что пустой список можно индексировать напрямую, чтобы добавить элементы в произвольные позиции. Попробуйте вставить строку ...

result_search = [[] for o in result_search_obj] 

... как раз перед линией ...

for k in range(0,len(result_search_obj)): 

..но, как и другие указали, что вам не нужно использовать range(len(x)) для индексируйте несколько списков с тем же значением индекса. Если у вас есть что-то вроде ...

list1 = [1, 2, 3] 
list2 = [4, 5, 6] 
for index in range(len(list1)): 
    list2[index] = list1[index] 

... можно использовать ...

list1 = [1, 2, 3] 
list2 = [4, 5, 6] 
for index, value in enumerate(list1): 
    list2[index] = value 
+0

указывает на то, что, поскольку u see result_search_obj - это список списков, поэтому я не могу удалить второй цикл, потому что я буду получать доступ только к первому элементу каждого списка. –

+0

Тогда, возможно, вам нужно ссылаться на переменную 'l' где-то внутри этот цикл? ;) – Aya

+0

Извините, я не понял, что означает u, ссылаясь на переменную 1 внутри этого цикла –

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