Если вы используете кроме вас, попробуйте также. Для получения подробной информации, проверьте documentation on error handling.
Кроме того, чтобы проверить, есть ли символ в строке, вы можете использовать ключевое слово.
Кроме того, изменение списка при повторении по нему может иметь странные эффекты. Поэтому вы должны собрать все номера, которые хотите удалить в первом прогоне, а затем перебрать список номеров, чтобы удалить и удалить их из списка.
Последнее, что вы не можете удалить из объекта диапазона, только из списка, поэтому вы должны превратить его в один. Окончательный код может выглядеть примерно так:
group = list(range(1, 100))
to_remove = []
for num in group:
if '1' in str(num) or '7' in str(num):
to_remove.append(num)
for num in to_remove:
try:
group.remove(num)
except ValueError:
pass
print(group)
Edit: Как Donkey Kong отметил, что также может быть сделано с помощью списка питоны понимания и проверки, если 1 или 7 в количестве может быть осуществлено с использованием сборки - в любой функции. Таким образом, легко проверить и другие цифры. Код предоставляется Donkey Kong выглядит следующим образом:
group = [x for x in range(1, 100) if not any(s in str(x) for s in ['1', '7'])]
print(group)
Edit 2: Использование, если вместо того, чтобы любой в списке понимание быстрее. Это было указано juanpa.arrivillaga. Вот его код для этого:
group = [x for x in range(1,100) if not ('7' in str(x) or '3' in str(x))]
print(group)
Когда я запускаю код с непосредственным удалением элементов, вместо использования 'to_remove', каждый раз, когда номер удаляется, следующий номер не проверяется. Метод фильтра - хорошая альтернатива, и я добавлю его к своему ответу. – Leon
Этот подход выполняется быстрее: '[x для x в диапазоне (1,100), если нет ('7' в str (x) или '3' в str (x))]' –