#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] в список результатов, а не возвращать его сразу. Затем верните список результатов.