我正在运行测试,看看我输入文件的值是否与我从API生成的值相同。所以我有从我的API生成的实际值,我有另一个预期值列表。我遇到的问题是我无法将苹果与苹果进行比较。
示例:
from itertools import *
from collections import *
s = [5, 7, 9, 12, 6]
m = 15
c = Counter(s)
u = list(c)
ul = len(u)
t = [c[x] for x in u]
p = product(*[xrange(i+1) for i in t])
e = ([a for b in [[u[i]] * x[i] for i in range(ul)] for a in b] for x in p)
r = [n for n in e if sum(n) == m]
print r
我不知道除了向你展示我的代码之外,还有什么方法可以更好地描述我所说的内容。
这是我的代码:
Actual = {red, bleu, yellow, purple}
expected = {bleu, red, purple, yellow}
failure: red != bleu, bleu != red, yellow != purple, purple != yellow
如何在1个foreach循环或同等范围内比较这些列表?任何帮助或协助将不胜感激。
编辑:
TreeSet<String> hashSet = (TreeSet<String>) calcGraph.getInputs();
boolean success = true;
String error="";
for(String xpath : hashSet) {
String actual = someApi(response, expression, xpath);
for ( String values : data.getDataOutputs().keySet() ) {
String expected = data.getDataOutputs().get(expectedXpath);
if ( !expected.equals(actual)) {
error+= "\nExpected : " + expected +"\nActual: " +actual+"\n";
success = false;
} if ( !success ) Assert.fail(error);
}
}
订单很重要,所以这会失败......
答案 0 :(得分:0)
这个问题太奇怪了。在标题中,您说HashSet
与HashSet
比较,以及您使用的内容TreeSet
。
从问题来看,您似乎有Set
的实际结果,并且您希望与预期结果的Set
进行比较,无论迭代顺序如何,我是对的吗?
使用contains
肯定是错误的,并且使用迭代器进行比较。
解决方案实际上是直截了当的。来自Set
的javadoc:
boolean equals(Object o)
将指定对象与此集进行相等性比较。返回true 如果指定的对象也是一个集合,则两个集合具有相同的值 size,并且指定集的每个成员都包含在此集合中 (或者等效地,该组的每个成员都包含在 指定的集合)。此定义确保equals方法有效 正确地跨越集合接口的不同实现。
您需要做的只是
expectedResultSet.equals(actaulResultSet)
答案 1 :(得分:-2)
您可以使用
Set.contains(value)
要检查实际值是否在预期值中,您只需要一个for循环来实现此目的
见这个
http://docs.oracle.com/javase/7/docs/api/java/util/Set.html#contains(java.lang.Object)