-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]
4

1 に答える 1

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}}
于 2013-07-19T11:27:16.887 に答える