Кодовая точка Unicode, равная и меньшая 0xffff
, кодируется с 3 или менее байтами (и, кроме того, требуется 4 байта).
так:
''.join(c for c in my_string if ord(c) <= 0xffff)
Я не уверен, что решение Ignacio быстрее: у меня есть функция больше (для каждого символа) (ord
), но <
- это просто целочисленное сравнение. С другой стороны, он должен выполнить сравнение строк, которое может быть (но не обязательно) сложным.
Что мне не нравится в решении Ignacio, так это использование <
в строках. Документация гласит « лексикографический », но такое слово (на английском языке) в словах имеет другое значение. Sso в python '<' для строк часто является ошибкой, но не в этом случае. Я думаю, что это одна из немногих ошибок в дизайне Python (<code>'B' < 'a', правда?). Намерение в моем решении (ИМО) яснее.