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