Могу ли я представить рекурсивное решение Python для этой проблемы?
def choose_iter(elements, length):
for i in xrange(len(elements)):
if length == 1:
yield (elements[i],)
else:
for next in choose_iter(elements[i+1:len(elements)], length-1):
yield (elements[i],) + next
def choose(l, k):
return list(choose_iter(l, k))
Пример использования:
>>> len(list(choose_iter("abcdefgh",3)))
56
Мне нравится его простота.
Вы можете использовать первые 128 символов ASCII, поэтому получите номер каждого символа с помощью ord
и удалите его, если это вне диапазона
# -*- coding: utf-8 -*-
def strip_non_ascii(string):
''' Returns the string without non ASCII characters'''
stripped = (c for c in string if 0 < ord(c) < 127)
return ''.join(stripped)
test = u'éáé123456tgreáé@€'
print test
print strip_non_ascii(test)
Результат
éáé123456tgreáé@€
123456tgre@
Обратите внимание, что @
включено, потому что, в конце концов, это символ ASCII. Если вы хотите удалить определенное подмножество (например, только числа, прописные и строчные буквы), вы можете ограничить диапазон, просмотрев таблицу ASCII
EDITED: после повторного прочтения вашего вопроса, возможно, вам нужно экранировать свой HTML код, поэтому все эти символы отображаются правильно после рендеринга. Вы можете использовать фильтр escape
в своих шаблонах.
Чтобы избавиться от специальных символов xml, html '<', '>', '&', вы можете использовать cgi.escape:
import cgi
test = "1 < 4 & 4 > 1"
cgi.escape(test)
Вернет:
'1 < 4 & 4 > 1'
Это, вероятно, тот минимум, которого вам следует избегать проблема. Для получения дополнительной информации вы должны знать кодировку своей строки. Если она соответствует кодировке вашего html-документа, вам не нужно делать что-то еще. Если нет вам нужно преобразовать в правильную кодировку.
test = test.decode("cp1252").encode("utf8")
Предположим, что ваша строка - cp1252, а ваш html-документ - utf8
Я нашел это некоторое время назад, так что это ни в коем случае не моя работа. Я не могу найти источник, но вот фрагмент из моего кода.
def unicode_escape(unistr):
"""
Tidys up unicode entities into HTML friendly entities
Takes a unicode string as an argument
Returns a unicode string
"""
import htmlentitydefs
escaped = ""
for char in unistr:
if ord(char) in htmlentitydefs.codepoint2name:
name = htmlentitydefs.codepoint2name.get(ord(char))
entity = htmlentitydefs.name2codepoint.get(name)
escaped +="&#" + str(entity)
else:
escaped += char
return escaped
Используйте его вот так
>>> from zack.utilities import unicode_escape
>>> unicode_escape(u'such as ® I want')
u'such as ® I want'
Вам нечего делать, поскольку Django автоматически экранирует символы:
см .: http: //docs.djangoproject .com / ru / dev / themes / templates / # id2