我有两个带有元组的列表,如下所示
a=[("a","b","c"),("d","e","f"),("h","e","d")]
b=[("b","c","a"),("d","e","f")]
考虑到元组中元素的顺序无关紧要,我想高效地获得两个列表之间的差异。因此set(a) - set(b)
不起作用,这给了我[('a', 'b', 'c'), ('h', 'e', 'd')]
作为输出。
相反,我想要下面给出的输出。如果元素只经过改组,例如(a, b, c)
和(b, a, c)
,它应该检测到相同的元组。
[('h', 'e', 'd')]
答案 0 :(得分:2)
您可以使用集合并返回列表:
"dependencies": {
"@wdio/allure-reporter": "^5.4.9",
"@wdio/cli": "^5.4.13",
"@wdio/local-runner": "^5.4.13",
"@wdio/mocha-framework": "^5.4.13",
"@wdio/spec-reporter": "^5.4.3",
"@wdio/sync": "^5.4.13",
...
},
我对元组进行排序,以排除具有相同字母但顺序不同的元组。
答案 1 :(得分:2)
此post使您可以根据定义定义如何检查是否相等。使用此功能,您可以遍历 public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter phone number: ");
String number = input.nextLine();
String phone ="";
for (int i = 0; i < number.length(); i++){
if (Character.isLetter(number.charAt(i)))
phone = getNumber(Character.toUpperCase(number.charAt(i)));
else
number.charAt(i);
}
System.out.println("Your number is " + phone);
}
public static int getNumber(char uppercaseLetter){
if (uppercaseLetter >= 'W' && uppercaseLetter <= 'Z')
return 9;
else if (uppercaseLetter >= 'T' && uppercaseLetter < 'W')
return 8;
else if (uppercaseLetter >= 'P' && uppercaseLetter < 'T')
return 7;
else if (uppercaseLetter >= 'M' && uppercaseLetter < 'P')
return 6;
else if (uppercaseLetter >= 'J' && uppercaseLetter < 'M')
return 5;
else if (uppercaseLetter >= 'G' && uppercaseLetter < 'J')
return 4;
else if (uppercaseLetter >= 'D' && uppercaseLetter < 'G')
return 3;
else
return 2;
}
}
中的项目以查看它们是否与a
中的项目匹配。
b
另一种方法是对元组进行排序,然后使用集合差异:
from collections import Counter
diff = []
for x in a:
if not any(Counter(x) == Counter(y) for y in b):
diff.append(x)