получить значения элементов в списке, которые встречаются только дважды, не более двух раз

#python #list #element

#python #Список #элемент

Вопрос:

У меня есть список элементов, которые я хочу сохранить в списке, которые встречаются только дважды, не более двух или менее двух раз.Ниже приведен список

 list = [595, 595, 344, 344, 628, 628, 628, 353, 353, 353, 353, 353]
 

Из списка я хочу, чтобы вывод был result = [595,344]

Приведенный ниже код возвращает только один элемент

 def has1dup(lst):
    setlst = list(set(lst)) # no duplicate elements
    for i in range(len(setlst)): # while the setlist's element count, 
        if lst.count(setlst[i]) > 1: # if the count of setlist[i] of lst is bigger than 1
            return setlst[i] # return it
 

Комментарии:

1. Вам нужно сохранить исходный порядок?

Ответ №1:

Здесь используйте это:

 lst2 = list(set([x for x in lst if lst.count(x)==2]))
 

используйте это, если вы не хотите менять порядок:

 lst = [595, 595, 344, 344, 628, 628, 628, 353, 353, 353, 353, 353]
lst2=[]
[lst2.append(x) for x in lst if lst.count(x)==2 and x not in lst2]
print(lst2)
 

Ответ №2:

Вы можете использовать Counter from collections .

например

 >>> from collections import Counter
>>> l = [595, 595, 344, 344, 628, 628, 628, 353, 353, 353, 353, 353]
>>> new_dict=Counter(l)
>>> new_dict
Counter({353: 5, 628: 3, 595: 2, 344: 2})
>>> [key for key, val in new_dict.items() if val == 2]
[595, 344]
 

Ответ №3:

Вам не хватает второго элемента, потому что вы используете return оператор.

Вместо этого используйте что-то вроде следующего

 mylist = [595, 595, 344, 344, 628, 628, 628, 353, 353, 353, 353, 353]
newlist = []
def has1dup(lst):
    setlst = list(set(lst)) # no duplicate elements
    for i in range(len(setlst)): # while the setlist's element count,
        if lst.count(setlst[i]) == 2: # if the count of setlist[i] of lst is bigger than 1
            newlist.append(setlst[i])

has1dup(mylist)
print(newlist)
 

Вывод

 [344, 595]
 

Теперь в приведенном выше случае мы объявили новый вызываемый список newlist . Для каждого элемента в наборе, для которого его количество в списке точно 2 , мы добавляем его в новый список.

Ответ №4:

Вам нужно создать список результатов и добавить setlst[i] в список результатов, а не возвращать его сразу. Затем верните список результатов.