我正在编写一个程序,输出有序的数字列表列表。说输出如下:
[1,1,1];
[1,1,2]
我想通过眼睛看一下输出并对它有所了解,但我的输出是数百到数千行。我想用以下更紧凑的格式编写输出:[1,1,1/2]
,其中斜杠表示在第三个插槽中我可以有1或2.所以,对于更长的例子,[1/2, 1/3, 5, 8/9]
将是[1,1,5,8];[1,1,5,9];[1,3,5,8];
等的紧凑方式。任何人都可以建议使用伪代码算法来实现这个目标吗?
编辑:所有列表的长度相同。此外,我希望一般在最后有多个列表。例如{[1,1,2],[1,1,3],[1,2,4]}应该成为{[1,1,2 / 3],[1,2,4]}。
答案 0 :(得分:0)
我做的是在第一个列表中的每个元素上使用哈希值。然后,您将遍历剩余的列表,并且对于其他列表中的每个位置,您都要检查该索引的第一个/原始列表中的哈希值,看看您之前是否看过它。所以你最终得到的结论是:
[1 : {1}, 1: {1, 3}, 5: {5}, 8: {8, 9}]
然后在打印/格式化列表时,您只需在哈希中打印每个键,除非您使用斜杠或其他任何键。
编辑:Bad Psuedocode(python)(未经测试):
def shorten_list(list_of_lists):
primary_list = list_of_lists[0]
hash_values = [{} * len(primary_list)]
for i in range(len(list_of_lists)):
current_list = list_of_lists[i]
for j in range(current_list):
num = current_list[j]
if num not in hash_values[j]:
hash_values[j] = j
for i in range(len(hash_values)):
current_dict = hash_values[i]
print primary_list[i]
for key in current_dict:
if key != primary_list[i]:
print '/', key
答案 1 :(得分:0)
以下是按您希望的方式对列表进行排序的实际代码。但也许最有用的可视化将是散点图。将数据导入您最喜欢的电子表格,并将其删除。
$(document).ready( function(){
var numbers = [
[1, 1, 5, 8],
[1, 1, 5, 9],
[1, 3, 5],
[1, 1, 5, 10, 15]];
$('#output').text(JSON.stringify(compactNumbers(numbers)));
});
function compactNumbers(numberlists){
var output = [];
for(var i = 0; i < numberlists.length; i++){
for(var j = 0; j < numberlists[i].length; j++) {
if(!output[j]) output[j] = [];
if($.inArray(numberlists[i][j], output[j]) == -1){
output[j].push(numberlists[i][j]);
}
}
}
return(output);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output"></div>