如何在列表python中找到并留下双打?

Igo*_*gor 5 python

如何在列表中只找到双打?我的算法版本

import collections
a = [1,2,3,4,5,2,4,5]
b = []

for x,y in collections.Counter(a).items():
    if y>1:
        b.append(x)

print(b)  # [2, 4, 5]

c = []
for item in a:
    if item in b:
        c.append(item)

print(c)  # [2, 4, 5, 2, 4, 5]
Run Code Online (Sandbox Code Playgroud)

需要找到c等结果

代码缺陷:

  1. 三个列表(a,b,c),一个集合(字典)
  2. 长代码

我需要留下列表双打值,例如.x = [1,2,2,2,3,4,5,6,6,7],需要[2,2,2,6,6]而不是[2,6]

Kar*_*rin 14

from collections import Counter

a = [1, 2, 3, 4, 5, 2, 4, 5]
counts = Counter(a)
print([num for num in a if counts[num] > 1])
Run Code Online (Sandbox Code Playgroud)


Isr*_*man 5

不是最有效的方式,但非常简洁:

a = [1,2,3,4,5,2,4,5]
b = [x for x in a if a.count(x) > 1]
print(b)
Run Code Online (Sandbox Code Playgroud)

  • 那是对的.Karin的解决方案高效而优雅.那种享受阅读的代码. (2认同)