Ответ 1
Использование понимания списка может быть более "питоническим".
filtered = [x for x in set(lst) if x < C]
У меня есть список, состоящий из замен, и я хочу сделать две вещи:
Я полагал, что могу использовать фильтр для 2 и использовать набор для достижения 1 что-то вроде
list(set(filter(lambda x:x<C, l)))
есть ли лучший/более питонский/более эффективный способ?
Использование понимания списка может быть более "питоническим".
filtered = [x for x in set(lst) if x < C]
Лучшие два способа сделать это - фильтр:
new_list = list(set(filter(lambda x:x<C, l)))
Или задайте понимание (что многие считают более пифоническим и даже более эффективным):
list({x for x in l if x < C})
Но я думаю, если вы знакомы с фильтром, вы можете просто придерживаться его.
На мой взгляд, наиболее Pythonic способ фильтрации наборов, где это возможно, это использование операций над множествами (диаграммы Венна):
A = {0, 1, 4, 5, 8};
B = {2, 1, 3, 4, 6};
print("Union :", A | B)
print("Intersection :", A & B)
print("Difference :", A - B)
print("Symmetric difference :", A ^ B)
Другой пример, когда вы просто хотите удалить значение 5 из набора A, просто наберите:
A - {5,}
и как и в этом вопросе, если вам нужно фильтровать для более больших значений, чем C, вы просто набираете "оператор проверки содержимого" в "in", который в коде Python выполняет наборы. магический метод содержит() (магический метод не должен вызываться напрямую, поэтому вы используете "в"):
{x for x in l if x > C}