假设我有一个由n个字符串列表组成的列表:
list1 = ["M","G"];
list2 = ["VP","P"];
list3 = ["E"]
lists= [ ["M","VP","E"], ["M","P","E"], ["G","VP","E"], ["G","P","E"] ]
result->包含所有输出列表(所有组合)
current->是当前的组合
public static void combination(ArrayList<ArrayList<String>> lists, ArrayList<ArrayList<String>> result, ArrayList<String> current, int k){
if(k==lists.size()){
result.add(current);
current = new ArrayList<String>();
System.out.println("(if) || k="+k+" || current"+current);
return;
}
for(int t=0;t<lists.get(k).size();t++){
current.add(lists.get(k).get(t));
System.out.println("(for) || k="+k+" || current"+current);
combination(lists, result, current, k+1);
}
}
用上述相同示例调用此函数时的输出:
public static void main(String[] args){
ArrayList<String> l1 = new ArrayList<String>();l1.add("M");l1.add("G");
ArrayList<String> l2 = new ArrayList<String>();l2.add("VP");l2.add("P");
ArrayList<String> l3 = new ArrayList<String>();l3.add("E");
ArrayList<ArrayList<String>> lists = new ArrayList<ArrayList<String>>();
ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>();
ArrayList<String> current = new ArrayList<String>();
lists.add(l1);lists.add(l2);lists.add(l3);
combination(lists, result, current, 0);
for(int i=0;i<result.size();i++){
System.out.println(result.get(i));
}
}
(for) || k=0 || current[M]
(for) || k=1 || current[M, VP]
(for) || k=2 || current[M, VP, E]
(if) || k=3 || current[]
(for) || k=1 || current[M, VP, E, P]
(for) || k=2 || current[M, VP, E, P, E]
(if) || k=3 || current[]
(for) || k=0 || current[M, VP, E, P, E, G]
(for) || k=1 || current[M, VP, E, P, E, G, VP]
(for) || k=2 || current[M, VP, E, P, E, G, VP, E]
(if) || k=3 || current[]
(for) || k=1 || current[M, VP, E, P, E, G, VP, E, P]
(for) || k=2 || current[M, VP, E, P, E, G, VP, E, P, E]
(if) || k=3 || current[]
[M, VP, E, P, E, G, VP, E, P, E]
[M, VP, E, P, E, G, VP, E, P, E]
[M, VP, E, P, E, G, VP, E, P, E]
[M, VP, E, P, E, G, VP, E, P, E]
另一种方法,也许容易得多:
public static List<List<String>> combination(List<List<String>> lists){
if (lists.size() == 1) {
return lists;
} else {
List<List<String>> subcombs = combination(lists.subList(1, lists.size()));
List<List<String>> result = new ArrayList<>();
for (String s : lists.get(0)) {
for (List<String> subcomb : subcombs) {
List<String> list = new ArrayList<>();
list.add(s);
list.addAll(subcomb);
result.add(list);
}
}
return result;
}
}
public static void main(String[] args){
List<String> l1 = Arrays.asList("M", "G");
List<String> l2 = Arrays.asList("VP", "P");
List<String> l3 = Arrays.asList("E");
System.out.println(combination(Arrays.asList(l1, l2, l3)));
// Output: [[M, VP, E], [M, P, E], [G, VP, E], [G, P, E]]
}
在每个递归步骤中,只需计算子组合,并在当前列表的每个字符串之前
我想在java中创建一个方法,该方法接收两个字符串列表:
我想要一个列表,它是列表元素列表的组合,例如:我的输入 输出应该是 非常感谢您的帮助。
问题内容: 有一个包含15个数字的列表,我需要编写一些代码来生成这些数字的所有32,768个组合。 我已经找到了一些代码(通过Googling),这些代码显然可以满足我的需求,但是我发现代码相当不透明并且对使用它很谨慎。另外我觉得必须有一个更优雅的解决方案。 对我而言,唯一发生的就是循环遍历十进制整数1–32768,并将其转换为二进制,然后使用二进制表示形式作为筛选器来选择适当的数字。 有人知道更
问题内容: 如果我有两个清单 什么是获取熊猫数据框的最优雅的方式,如下所示: 注意,第一列是索引。 问题答案: 使用于:
问题内容: 编辑:这不是如何获取列表元素的所有可能组合的精确重复? 本主题是关于查找唯一组合,而另一主题是关于查找所有组合。 如果我有python列表: 从以下列表中获取3个元素的所有可能 唯一组合 的最佳方法是什么: 组合中元素的顺序无关紧要。例如,和将被视为相同的组合。 我可能可以编写一些循环来执行此操作,但我认为可能会有一个单行代码可以执行相同操作。 问题答案: 您需要:
问题内容: 有人告诉我 编写一个函数square(a),该函数接受一个数字数组a并返回一个包含每个平方值的数组。 起初,我有 但是,由于我正在打印,而且没有像被问到的那样返回,因此这不起作用。所以我尝试了 但这仅平方我数组的最后一个数字。我如何才能使整个列表平方? 问题答案: 您可以使用列表理解: 或者您可以: 或者,您可以使用发电机。它不会返回列表,但是您仍然可以迭代它,并且由于不必分配整个新列