python - 在python中提取列表中的重复元素

标签 python list list-comprehension

我有一个列表理解问题,如果有人能解决我将不胜感激。问题是这样的:

我有一个元素列表:listX 和 listY

listX = [1,7,7,4,5,7,7]

listY = [2,4,4,3,1,4,6]

我想提取 listX 和 listY 的重复元素,但我需要确保 (1) 每个 listX 和 listY 中只有 3 对 重复元素,并且 (2)两个列表的重复元素索引相同。这意味着在 listX 中,重复元素是“7”,对于 listY,重复元素是“4”,它们共享相同的索引 1、2、5——尽管重复元素出现在 listX 的索引 6 中,但它没有在 listY 中作为重复元素出现,因此不计为重复对。

我希望提取重复的元素对,并在删除重复元素的情况下更新列表 listX 和 listY。

所以最终的输出是

listX = [1,4,5,7]
listY = [2,3,1,6]

提取值

x=7
y=4

分别来自listX和listY

最佳答案

首先,使用 zip 和字典计算每对出现的频率:

listX = [1,7,7,4,5,7,7]
listY = [2,4,4,3,1,4,6]

pairs = {}
for (x, y) in zip(listX, listY):
    pairs[(x,y)] = pairs.get((x,y), 0) + 1

或者,按照评论中的建议,使用 collections.Counter:

pairs = collections.Counter(zip(listX, listY))

现在,将是 {(1, 2): 1, (7, 4): 3, (7, 6): 1, (4, 3): 1 , (5, 1): 1}.您还可以使用该字典来检查有多少重复对,以备不时之需,以及哪些对最常重复或重复特定次数。 然后,再次使用 zip 过滤那些具有正确计数的对并将它们分发回列表:

listX, listY = zip(*[p for p in zip(listX, listY) if pairs[p] != 3])

现在,listXlistY(1, 4, 5, 7)(2, 3, 1, 6)(这些是元组,但您可以轻松地将它们再次转换为列表)。

要获取重复对本身,您可以执行以下操作:

pair = pairs.most_common(1) # when using collections.Counter
pair = [p for p, c in pairs.items() if c == 3] # otherwise

关于python - 在python中提取列表中的重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34910053/

相关文章:

python - ipdb调试器,跳出循环

python - conda 安装 : Packages missing in current channels

python - Pandas :合并两个索引列

list - JPQL 结合 IN 和 LIKE

python - 奇怪的性能结果——循环 vs 列表理解和 zip()

python - 如何在python中测量knn分类器的准确性

list - 使用引号的奇怪结果,递归地反转包含所有子列表的列表

ruby - Ruby 的停用词列表

python - 解释python列表理解技术

Python 从列表列表中选择一项