【发布时间】:2011-06-07 10:04:32
【问题描述】:
我确实喜欢在 Python 中处理列表的方式。它执行任何递归解决方案,看起来既简单又干净。例如,在 Python 中获取列表中元素的所有排列的典型问题如下:
def permutation_recursion(numbers,sol):
if not numbers:
print "this is a permutation", sol
for i in range(len(numbers)):
permutation_recursion(numbers[:i] + numbers[i+1:], sol + [numbers[i]])
def get_permutations(numbers):
permutation_recursion(numbers,list())
if __name__ == "__main__":
get_permutations([1,2,3])
我确实喜欢通过执行以下操作来简单地获取已修改列表的新实例的方式
numbers[:i] + numbers[i+1:] 或 sol + [numbers[i]]
如果我尝试在 Java 中编写完全相同的代码,它看起来像:
import java.util.ArrayList;
import java.util.Arrays;
class rec {
static void permutation_recursion(ArrayList<Integer> numbers, ArrayList<Integer> sol) {
if (numbers.size() == 0)
System.out.println("permutation="+Arrays.toString(sol.toArray()));
for(int i=0;i<numbers.size();i++) {
int n = numbers.get(i);
ArrayList<Integer> remaining = new ArrayList<Integer>(numbers);
remaining.remove(i);
ArrayList<Integer> sol_rec = new ArrayList<Integer>(sol);
sol_rec.add(n);
permutation_recursion(remaining,sol_rec);
}
}
static void get_permutation(ArrayList<Integer> numbers) {
permutation_recursion(numbers,new ArrayList<Integer>());
}
public static void main(String args[]) {
Integer[] numbers = {1,2,3};
get_permutation(new ArrayList<Integer>(Arrays.asList(numbers)));
}
}
要创建我需要做的相同递归:
ArrayList<Integer> remaining = new ArrayList<Integer>(numbers);
remaining.remove(i);
ArrayList<Integer> sol_rec = new ArrayList<Integer>(sol);
sol_rec.add(n);
这很丑陋,更复杂的解决方案会变得更糟。喜欢this example
所以我的问题是……Java API 中是否有任何内置运算符或辅助函数可以使该解决方案更加“Pythonic”?
【问题讨论】:
-
总有 Jython :)
-
标题中的
more是多余的——问题应该是在Java 中是否有任何巧妙的方式来处理列表。和 afaik,不 - 没有。
标签: java python list operators language-design