【问题标题】:How to find all elements when comparing two lists?比较两个列表时如何找到所有元素?
【发布时间】:2016-11-10 15:54:19
【问题描述】:
import Counter
import collections
import itertools, collections

List1=[('1234', '5678', 9101112, 131415, 161716, 19), ('1234', '5678', 9101112, 131415, 161716, 19), ('1723113685', '1958120268', 704338729, 1310973186, 38760, 80), ('1723113685', '1958120268', 704338729, 1310973186, 38760, 70), ('1234', '5678', 9101112, 131415, 161716, 19), ('19216813', '6311624397', 3851697578, 0, 58816, 80), ('6311624397', '19216813', 2747564191, 3851697579, 890, 58816), ('19216813', '6311624397', 3851697579, 2747564192, 58816, 80), ('1234', '5678', 9101112, 131415, 161716, 19), ('19216813', '6311624397', 3851698039, 2747565640, 58816, 50)]

List2=[('1723113685', '1958120268', 704338729, 1310984130, 38760, 80), ('1723113685', '1958120268', 704338729, 1310985498, 38760, 80), ('1723113685', '1958120268', 704338729, 1310986866, 38760, 80), ('1723113685', '1958120268', 704338729, 1310973186, 38760, 80), ('6311624397', '19216813', 2747564192, 3851697579, 80, 58816), ('19216813', '6311624397', 3851698039, 2747564192, 58816, 80), ('19216813', '6311624397', 3851698039, 2747565640, 58816, 80), ('1234', '5678', 9101112, 131415, 161716, 19), ('19216813', '6311624397', 3851698039, 2747568536, 58816, 80), ('19216813', '6311624397', 3851698039, 2747569984, 58816, 80), ('19216813', '6311624397', 3851698039, 2747571432, 58816, 80), ('19216813', '6311624397', 3851698039, 2747572880, 58816, 80)]


ab=[]
abDict = Counter(ab) 
for x in List1:
    if x in List2:

    ab.append(x)

for key, value in abDict.items():
    if value>2:
    print key 

我想查找list1list2 之间的所有匹配元素。当我用计数器更改list1list2 时,它不是找到所有元素,而是只显示匹配一个元素。

这可以显示所有元素,但我找不到多少元素。

【问题讨论】:

  • 你的代码中是否有另一部分显示你是如何做到这一点的:“当我用计数器更改 list1 和 list2 时”?如果没有,预期的输出是什么?你得到的输出是什么?
  • 没有其他的部分,因为我无法得到结果。当我更改它们计数器时,如果不是,输出是匹配元素但只显示一次实际上有许多相同的元素。如果 list1 有 1,1,1,如果 list2 有 1,那么我想要 1,1,1.. 我取 1,1,1 但如果值 >2 不起作用

标签: list compare counter


【解决方案1】:

遍历list1并检查元素是否包含在list2中,并覆盖list所在类中的equals/hashcode方法。

List<ClassA> list1 = [a1, a2];
List<ClassA> list2 = [a3, a4];

List<ClassA> matchedElement = new ArrayList<ClassA>();
for (ClassA a: list1) {
   if (list2.contains(a)){
     matchedElement.add(a); 
   }
}

System.out.println(matchedElement);

public Class ClassA {
@Override
    public boolean equals(Object obj) {
//compare objects values from A
}

@Override
    public int hashCode() {
final int prime = 31;
int result = 1;
        result = prime
                * result + obj.hashCode();
}

【讨论】:

  • 感谢您的回答,但 ListmatchedElement = new ArrayList(); SyntaxError:无效的语法。我写了 newArrayList 没关系。但是对于 (ClassA a: list1) {SyntaxError: invalid syntax。我无法修复,我是 python 新手,这些代码对我来说似乎非常困难。我没有太多信息可以理解这些代码。
  • 对于 Python,您可能需要在 stackoverflow 中查看另一个线程。
猜你喜欢
  • 1970-01-01
  • 2020-07-04
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 2015-12-16
相关资源
最近更新 更多