Два простых способа выполнить просто фильтрацию:
Используя filter
:
names = filter(lambda name: name[-5:] != "Smith", names)
Используя понимания списка:
names = [name for name in names if name[-5:] != "Smith"]
Примечание, что оба случая сохраняют значения, для которых функция предиката оценивает к True
, таким образом, необходимо инвертировать логику (т.е. Вы говорите, "сохраняют людей, у которых нет фамилии, Smith" вместо "удаляет людей, у которых есть фамилия Smith").
Редактирование Забавный... два человека индивидуально отправили оба из ответов, которые я предложил, поскольку я отправлял мой.
Получить время от NIST с помощью дневного протокола:
Дневная служба на основе UDP Сервер прослушивает дейтаграммы UDP на порте 13 UDP. При получении дейтаграммы отправляется ответная дейтаграмма, содержащая текущую дату и время в виде символьной строки ASCII (данные в полученной дейтаграмме игнорируются).
Формат NIST для ответ: JJJJJ YR-MO-DA HH: MM: SS TT LH msADV UTC (NIST) OTM
Лучшее решение, которое я придумал, - это использование таймера Mach, который считает единицы времени с момента последней загрузки iphone.
Это отлично работает. Единственное ограничение заключается в том, что пользователю нельзя разрешить перезагрузку, иначе это приведет к недействительности его времени.
Я обнаруживаю перезагрузку, сначала сохраняя временную метку iphone, связанную с таймером Mach, а затем проверяя каждый раз при запуске приложения, поэтому она не изменилась. Это имеет как побочный эффект: если пользователь изменяет дату и время iPhone в то время, когда он рассчитывает время, это также аннулирует счет, но это нормально.
Как я могу определить, был ли iphone перезагружен с момента последнего запуска приложения
Я могу легко предупредить своих пользователей об этом: перезагрузка или изменение времени iphone, когда вы находитесь на часах, аннулирует ваше подсчитанное время.