我来自Java世界,确实很难理解下面的代码。

sortIx=['a2', 'a4', 'a1', 'a3', 'a5']
cItems=[sortIx]
print cItems
while len(cItems)>0:
    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]
    print cItems


这行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]的作用是什么?您将如何用Java(或Scala或Groovy)编写此代码?

编辑

感谢Reblochon Masque,我能够理解这一点!如果有兴趣的话,将其翻译成普通的语句将是这样的:

cItems = cItems.findAll { it -> it.size() > 1}
               .collectMany { it -> [it.subList(0, it.size().intDiv(2)), it.subList(it.size().intDiv(2), it.size())] }

最佳答案

这条线是做什么的?

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中的每个内部列表划分为两个大小为一半的子列表(每个元素包含一半),除非子列表仅包含一个元素,然后将其忽略。

10-08 14:07