2013-07-19 87 views
-2

我的代碼是這樣的:列表安排

j=0 
list1=[] 

for port in portlist1: 
    l=[[port.getname(),port.getsize()]] 
    for register in port.getregisters(): 
     j=j+1 
    l.append(j) 
    list1.append(l) 
    j=0 

輸出打印列表1是:

 [[['B', 10], 2], [['C', 25], 1], [['F', 30], 0]] 

,如果我想使用的功能

 register.getaddress(),register.getdirection() inside 2nd for loop instead of increment j. 
我應該做哪些改變

所以我的輸出應該是:

print list1:  [[['B', 10], [['1000',IN],['1',OUT]]], [['C', 25], ['v', 1001]], [['F', 30], []]] 
print list1[0]: [['B', 10], [['1000',IN],['1',OUT]] 
print list1[0][1]: ['1000',IN],['1',OUT] 
+2

什麼是'register.getaddress()'和'register.getdirection()'? 你想讓他們做什麼? –

+0

請更改您的問題。嘗試使用字典,而不是嵌套列表。另外python不鼓勵聲明迭代計數('j')。改爲使用'enumerate'。 – Babu

+0

@JamesPolley:register.get address()和register.getdirctions()給我['1000',IN] – user2592659

回答

0

我想你可以用一個列表理解這樣做:

list1 = [] 

for port in portlist1: 
    l = [[port.getname(),port.getsize()], 
     [[register.getaddress(), register.getdirection()] 
      for register in port.getregisters()]] 
    list1.append(l) 

但是,給你一個如同噩夢般深深的嵌套列表。我認爲巴布關於使用字典的評論是正確的。以下是如何改進這種方式:

dict1 = {} 
for port in portlist1: 
    dict1[port.getname()] = {"size": port.getsize(), 
          "registers": {register.getaddress(): register.getdirection() 
              for register in port.getregisters}}