使用列表理解只在列表中查找对

2024-03-28 10:18:55 发布

您现在位置:Python中文网/ 问答频道 /正文

寻找一个奇特的单线解决方案,找到一个列表中的项目对使用列表理解。你知道吗

我有一些代码可以找到乘法,但不知道如何将这些乘法拆分成对。你知道吗

lst = [1,2,4,2,2,3,3,1,1,1,2,4,3,4,1]
len(set([x for x in lst if lst.count(x) > 1]))

上面的代码返回4。答案应该是6对、[1,1,1,1,1] = 2[2,2,2,2] = 2[3,3,3] = 1[4,4,4] = 1。你知道吗


Tags: 项目答案代码in列表forlenif
3条回答

您可以执行以下操作(如果我正确理解了您的配对方法):

lst = [1,2,4,2,2,3,3,1,1,1,2,4,3,4,1]
the_dict = {x: int((lst.count(x)/2)) for x in lst}

print(sum(the_dict.values()))

> 6

print(the_dict)

> {1: 2, 2: 2, 4: 1, 3: 1}

这将生成一个包含所有对计数的字典,然后可以对字典中的值求和以获得对计数。如果需要,还可以使用字典,其中包含每个值的对计数。你知道吗

没有其他中间变量的一条线性关系是:

sum(lst.count(x)//2 for x in set(lst))

它在set(lst)上循环,其中包含lst中所有不同的数字,并将它们的对计数相加。你知道吗

另一种方法是使用[Python 3.Docs]: class collections.Counter([iterable-or-mapping])

>>> from collections import Counter
>>>
>>> lst = [1, 2, 4, 2, 2, 3, 3, 1, 1, 1, 2, 4, 3, 4, 1]
>>>
>>> c = Counter(lst)
>>> c
Counter({1: 5, 2: 4, 4: 3, 3: 3})
>>>
>>> sum(item // 2 for item in c.values())
6

以及一行等价物:

>>> sum(item // 2 for item in Counter(lst).values())
6

相关问题 更多 >