Это зависит. Если точный ответ действительно имеет значение, сделайте некоторое профилирование и узнайте. Если Вы уверены, что у Вас никогда не будет больше, чем определенное число элементов в наборе, пойдите со Списком. Если число неограниченно, используйте HashSet.
Вы пытаетесь передать что-то байтовую строку, но невозможно (из-за нехватки информации, которую вы предоставляете) сказать , что вы пытаетесь передать . Вы начинаете со строки Unicode, которая не может быть закодирована как ASCII (кодек по умолчанию), поэтому вам придется кодировать каким-то другим кодеком (или транслитерировать его, как предлагает @ R.Pate), но это невозможно использовать для скажите , какой кодек вам следует использовать, потому что мы не знаем, что вы передаете байтовую строку, и, следовательно, не знаем, что эта неизвестная подсистема сможет принять и правильно обработать с точки зрения кодеков .
В такой полной темноте, в которой вы нас оставляете, utf-8
является разумным слепым предположением (поскольку это кодек, который может представлять любую строку Unicode точно как строку байтов,
Вы пытаетесь преобразовать Unicode в ascii в «строгом» режиме:
>>> help(str.encode)
Help on method_descriptor:
encode(...)
S.encode([encoding[,errors]]) -> object
Encodes S using the codec registered for encoding. encoding defaults
to the default encoding. errors may be given to set a different error
handling scheme. Default is 'strict' meaning that encoding errors raise
a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and
'xmlcharrefreplace' as well as any other name registered with
codecs.register_error that is able to handle UnicodeEncodeErrors.
Возможно, вам нужно что-то вроде одного из следующих:
s = u'Protection™'
print s.encode('ascii', 'ignore') # removes the ™
print s.encode('ascii', 'replace') # replaces with ?
print s.encode('ascii','xmlcharrefreplace') # turn into xml entities
print s.encode('ascii', 'strict') # throw UnicodeEncodeErrors
«Лучший» способ всегда зависит от ваших требований; так какие твои? Подходит ли игнорирование не-ASCII? Следует ли заменить ™ на "(tm)"? (Что выглядит привлекательно для этого примера, но быстро ломается для других кодовых точек - но это может быть именно то, что вам нужно.) Может ли исключение быть именно тем, что вам нужно; теперь вам просто нужно как-то с этим справиться?
Только вы действительно можете ответить на этот вопрос.
способ всегда зависит от ваших требований; так какие твои? Уместно ли игнорировать не-ASCII? Следует ли заменить ™ на "(tm)"? (Что выглядит привлекательно для этого примера, но быстро ломается для других кодовых точек - но это может быть именно то, что вам нужно.) Может ли исключение быть именно тем, что вам нужно; теперь вам просто нужно как-то с этим справиться?Только вы действительно можете ответить на этот вопрос.
способ всегда зависит от ваших требований; так какие твои? Уместно ли игнорировать не-ASCII? Следует ли заменить ™ на "(tm)"? (Что выглядит привлекательно для этого примера, но быстро ломается для других кодовых точек - но это может быть именно то, что вам нужно.) Может ли исключение быть именно тем, что вам нужно; теперь вам просто нужно как-то с этим справиться?Только вы действительно можете ответить на этот вопрос.