2017-08-02 36 views
-3

我想用一段python代码解决Nodebox3中的问题。这是在Nodebox 3中缺少的功能。这里是我的问题:比较两个列表(值)和geht True/False back

我想比较两个不同的列表的值,并创建一个新的输出列表。新列表应该包含列表1和列表2的详细信息以及比较过程的结果。 (对或错)

List1和List2中的数字在列表中存在一次,但它们可能是未排序的,并且在每个列表中的每个列表的不同位置(索引)都有可能存在每次加载。

My idea Compare Lists and Result

Values List 1 (Master): App1 
1 
2 
3 
4 
5 

Values List 2 (Compare to List 1): App2 
2 
4 

Output (list with Header): 
App1 App2 CompareResult 
1  0  False 
2  2  True  
3  0  False 
4  4  True 
5  0  False 

我想我自己创造了一些代码,但我是新来编程,它给了我不结果了,我要找的。它只显示我匹配的数字。就这些。也许有人有一个想法,我如何得到错误的结果。

​​

def matches_out(list1, list2): 
    set1 = set(list1) 
    set2 = set(list2) 
    # set3 contains all items common to set1 and set2 
    set3 = set1.intersection(set2) 
    #return matches 
    found = [] 
    for match in set3: 
     found.append(match) 
    return found 

如果有人有一个想法,感谢您的帮助。

+0

嗨,我们希望能够更快地帮助您,我们需要查看您正在处理的代码,以便我们可以一起调试。欢呼 – royjavelosa

+0

请在问题中填入所有相关的代码。不要链接到第三方网站。 – DyZ

+0

如果您发布代码的图片,您希望我们重写所有内容以帮助您。为什么不在问题中粘贴代码以使其更容易?截图和上传比复制粘贴文本更容易吗? –

回答

0

检查两个列表的交集是正确的,但只有一半的解决方案,因为它只找到匹配。你也想报告不匹配,为此你需要两个列表的联合。

list1 = [1,2,3,4,5] 
list2 = [2,4] 
matches = set(list1).intersection(list2) 
candidates = set(list1).union(list2) 
result1 = [] # 1st column of output 
result2 = [] # 2nd column of output 
for c in sorted(candidates): 
    result1.append(c if c in list1 else 0) 
    result2.append(c if c in list2 else 0) 
for i in range(len(result1)): 
    print ("{0}\t{1}\t{2}\t".format(result1[i], result2[i], result1[i]==result2[i])) 

产生这样的输出:

1 0 False 
2 2 True  
3 0 False 
4 4 True  
5 0 False 

目前尚不清楚你想要什么发生,如果相同数量似乎比在列表中一次。你的代码忽略重复,所以我遵循同一行。

我会给你添加标题。

编辑:OP报告的固定切割误差。

+0

亲爱的BoarGules。非常感谢您的解决方案和帮助。我发现它使用一个小的修改“{0”。我现在尝试使用它来实现到Nodebox 3.完美的工作,谢谢!瑞德安迪 – e2783