如何找到 2 个列表之间的共同点? [复制]

Posted

技术标签:

【中文标题】如何找到 2 个列表之间的共同点? [复制]【英文标题】:How do I find what is common between 2 lists? [duplicate] 【发布时间】:2015-12-15 15:24:21 【问题描述】:

我有 2 个很长的化学物质清单(每个清单大约 100 种化学物质),我想找出两个清单中常见的化学物质。我基本上需要一个程序,它可以让我插入 2 个长列表,然后打印出常见的化学物质。我目前只知道 java-script 和 python,如果不检查 2 个列表中至少 1 个中的每种化学物质,我不确定如何做到这一点。

【问题讨论】:

你已经尝试了什么? 我在脚本中插入了一个列表,然后从另一个列表中输入化学物质,看看我输入的化学物质是否在脚本中的列表中。 您应该发布您尝试过的不要求代码的内容 【参考方案1】:

您可以尝试使用 underscore.js 在 JavaScript 中进行各种操作。_.difference : 从数组中返回其他数组中不存在的值。

_.difference([1, 2, 3, 4, 5], [5, 2, 10]);
=> [1, 3, 4]

你可以在python中试试

list(set([1, 2, 3, 4, 5]) - set([5, 2, 10]))
=> [1, 3, 4]

【讨论】:

【参考方案2】:

在 JS 中你可以使用 filter 来做这样的事情:

var arr1 = [1, 2, 3, 4, 5];
var arr2 = [3, 10, 12, 4, 15];

function findCommon(arr1, arr2) 
    return arr1.filter(function (el) 
        return arr2.indexOf(el) > -1;
    );


findCommon(arr1, arr2); // [3, 4]

DEMO

【讨论】:

【参考方案3】:

您可以使用集合来执行此操作。我建议先将每个条目转换为小写,如下所示:

list_1 = ["Barrelene", "Mimimycin"]
list_2 = ["Prismane", "barrelene", "Josiphos"]

set_1 = set([x.lower() for x in list_1])
set_2 = set([x.lower() for x in list_2])

print set_1.intersection(set_2)

这将显示:

set(['barrelene'])

如果这两个列表在文本文件中,您可以使用以下脚本:

with open('list_1.txt', 'r') as f_list_1:
    set_1 = set([name.strip().lower() for name in f_list_1])

with open('list_2.txt', 'r') as f_list_2:
    set_2 = set([name.strip().lower() for name in f_list_2])

for name in set_1.intersection(set_2):
    print name

我建议您使用 Microsoft Word 将您的两个文档保存为文本文件。虽然也可以使用 Python 模块直接读取 docx 文件。

【讨论】:

这是否意味着我必须在每一种化学品周围加上引号? 您的清单在哪里?它们是否在两个文本文件中,即每行一个名称? 在word文档中是这样的。 我添加了一个可以通过文本文件工作的版本。 Word 文件需要另一个库。【参考方案4】:

l1 = [1,2,3,4]

l2 = [3,2,22]

commonInBoth = set(l1) & set(l2)

打印(commonInBoth)

2, 3

【讨论】:

以上是关于如何找到 2 个列表之间的共同点? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

查找两个列表列列表之间的共同元素?

查找两个活动记录项数组之间的共同项

如何从两个不同的数组中找到共同的对象并打印另一个对象?

在任意数量的数组之间找到共同项的最有效方法

利用Python画Venn韦恩图分析数据差异及共同点

比较不同长度的两个文件之间的共同值(Linux)