pythonで1文にfor in が多重ループになっている場合の解釈は?

投稿者: Anonymous

現在pythonのコードをmatlabに変換しています。以下のコードの解釈がよく分かりませんので、教えていただけると幸いです。コードの内容はrecursive bisectionとなります。

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

cItems=[i[j:k]for i in cItems for j,k in ((0,len(i)/2),(len(i)/2,len(i))) if len(i)>1]

でcItemsの一文をforループで分解してmatlabコードに変換したいのですが、この部分のpython のコードがtrickyに組まれておりよく分かりません。ご存知の方いらしましたらご教授ください。

解決

提示されたコードは動作しませんでした。

とりあえず、文法で解釈して単純に展開すると以下のようになります。
元のコードはPython2向けのようなので、Python3向けの修正も入れます。

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

cItems2 = []
for i in cItems:
    for j,k in [(0, len(i)//2), (len(i)//2, len(i))]:
        if len(i) > 1:
            cItems2.append(i[j:k])

もうちょっと展開します

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

cItems2 = []
for i in cItems:
    if len(i) > 1:
        j = 0
        k = len(i) // 2
        cItems2.append(i[j:k])

        j = len(i) // 2
        k = len(i)
        cItems2.append(i[j:k])

展開方法はこんな感じです。
元コードの正しく動作するものがあれば、同じように展開して構造を理解できるかと思います。

回答者: Anonymous

Leave a Reply

Your email address will not be published.