почему не добавляется значение в список?
Необходимо, чтобы значения, которых нет в w
, но есть в s
, добавлялись в список lst
. Не понимаю, в чём проблема.
s = [1, 2, 'set', 'frozenset', False, 3.14 ,'set', 'mama', 2, 3.148, 'frozenset']
w = set(s)
w = list(w)
lst = []
print(s, w)
if len(s) > len(w):
for i in s:
if i not in w:
lst.append(i)
print(f"вы отгадали нужный символ {lst}")
else:
print('неудача')
Ответы (2 шт):
Автор решения: user615238
→ Ссылка
в w
будут все значения, что и в s
, но только по одному разу.
Таких значений, чтобы только в s
, просто нет, поэтому ничего и не добавляется.
Автор решения: AnnaBazueva
→ Ссылка
Надо немного иначе...
s = [1, 2, 'set', 'frozenset', False, 3.14 ,'set', 'mama', 2, 3.148, 'frozenset']
lst = [item for item in set(s) # перебираем множество у Вас было w
# но берём только те элементы которых в s больше одного
if (c := s.count(item)) > 1
# далее закидываем элемент c - 1 раз
for _ in range(c - 1)]
if lst:
print(f"вы отгадали нужный символ {lst}")
else:
print('неудача')
Walrus
В этом условии: if (c := s.count(item)) > 1
с помощью выражения присваивания :=
мы сохраняем в переменной c
результат метода count()
,
который используем уже ниже для добавления дублирующих элементов из s
.
Для оператора ”walrus” есть PEP 572,
начните знакомство с раздела Примеры (Examples)
тоже, но чуть-чуть иначе:
from collections import Counter
s = [1, 2, 'set', 'frozenset', False, 3.14 ,'set', 'mama', 2, 3.148, 'frozenset']
count = Counter(s)
lst = [item for item, c in count.items() if c > 1 for _ in range(c - 1)]
if lst:
print(f"вы отгадали нужный символ {lst}")
else:
print('неудача')
collections.Counter Документация