2015-01-01 9 views
0

코드에 대한 기본적인 도움이 필요합니다. 변수 program_controls을 사용할 때마다 변수 self.add_programs에 대한 값으로 새 목록을 만들려고합니다. 배열에 저장할 단추 목록.파이썬 오류 : IndexError : 목록 색인 범위 외

나는이 때 :

self.add_programs = list() 
self.rows += 1 

program_controls = xbmcgui.ControlButton(
    int(position_start), 
    int(position_top), 
    int(program_width), 
    int(program_height), 
    program_title, 
    focusTexture = self.path + self.button_focus, 
    noFocusTexture = self.path + self.button_nofocus, 
    textColor ='0xFFFFFFFF', 
    focusedColor ='0xFF000000' 
) 
self.add_programs[self.rows].append(ProgramControls(program_controls, program)) 

를 그것은 나에게 오류를 제공합니다 : IndexError : 목록 지수 오류가이 라인에서 점프

범위를 벗어 : 여기

self.add_programs[self.rows].append(ProgramControls(program_controls, program)) 

입니다 코드 :

class ProgramControls(object): 
    def __init__(self, control, program): 
     self.control = control 
     self.program = program 



class MyClass(xbmcgui.WindowXML): 

    def __init__(self): 
     self.add_programs = list() 
     self.rows = 0 

    def GoDown(self): 
     self.add_programs = list() 
     self.rows += 1 

     program_controls = xbmcgui.ControlButton(
      int(position_start), 
      int(position_top), 
      int(program_width), 
      int(program_height), 
      program_title, 
      focusTexture = self.path + self.button_focus, 
      noFocusTexture = self.path + self.button_nofocus, 
      textColor ='0xFFFFFFFF', 
      focusedColor ='0xFF000000' 
     ) 
     self.add_programs[self.rows].append(ProgramControls(program_controls, program)) 
    prog_button = [elem.control for elem in self.add_programs] 


    if self.programs == False: 
     self.addControls(prog_button) 

버튼 목록을 추가 할 때마다 배열에 버튼을 저장할 수있는 방법을 알려주십시오.

가능한 경우 알려 주시기 바랍니다.

+0

내가하려는 일을 완전히 이해하지 못했지만 목록을 전혀 색인하지 않은 경우 어떻게해야합니까? 'self.add_programs.append (ProgramControls (program_controls, program))처럼 ' – Kevin

+0

'self.add_programs'는'self.rows'보다 짧습니다; 예를 들어, 다음을 고려하십시오 :'arr = [1]; arr [2]'... 'arr [2]'가 없기 때문에이 오류가 발생합니다 ....'self.add_programs [self.rows - 1]'를 사용하고 싶지만, 코드를 너무 조심스럽게 검사하십시오 ... – Carpetsmoker

+0

'self.add_programs.append (...)'를 시도하십시오. – Javier

답변

3

mylist[3].append()을 작성하면 mylist의 네 번째 항목 인 목록에 추가하려고합니다. 더 명확하게하려면 (mylist[3]).append()으로 쓸 수도 있습니다.

mylist에 추가하려면 mylist.append()을 사용해야합니다. 특정 인덱스에 설정하려면 list.insert(index, item)을 사용할 수 있습니다. 그러나 목록이 index만큼 길지 않은 경우 끝에 추가됩니다.

특정 키를 사용하려면

가 대신 dict() 사용 : 귀하의 경우에는

mydict = {} 
dict[3] = my_item 

, 난 그냥 그러나 self.add_programs.append()을 사용하십시오.

+0

@ThornWiggers, 도와 주셔서 대단히 감사합니다. 나는'self.add_programs.append()'를 사용하여 버튼 목록을 추가하고 싶지만 배열에 저장하기 위해 버튼 목록을 어떻게 읽을 수 있는지는 뭔가를 사용해야한다.이 list.insert (index, 항목)'? –

+0

'list.insert()'는 이미'a = [0,1,2,4,5,6]'와 같은 목록을 가지고 있고 특정 위치에 무엇인가를 삽입하고자 할 때 유용합니다 :'a.insert (3, 3)'은'a = [0,1,2,3,4,5,6]'을 준다. 나는 당신이 '배열에 저장할 버튼의 목록을 읽는다'는 것이 무엇인지 모르겠다. 그러나'insert'는 거의 필요하지 않다. –

+0

@ThornWiggers 미안 해요 배열에 항목을 삽입 할 수 있습니다. 그래서 저장 한 배열 목록을 열기 위해'.append'를 사용할 수 있습니다. 'list.insert()'를 사용해야합니까? 내가 사용해야하는 코드를 제게 보여 주시겠습니까? 죄송합니다.'list.insert (index, item)'을 사용하려면 어떻게해야하는지 혼란 스럽습니다. –