两个无序元组列表之间的差异

时间:2019-02-09 21:15:15

标签: python

我有两个带有元组的列表,如下所示

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')]

2 个答案:

答案 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)