У меня была такая же проблема. Исправьте его так:
width: 100%; padding: 5px; / * -------------- Теперь удалите из дополнения, добавленного вами --------------- * / margin: -5px;
Приветствия
Я думаю, вам нужно написать дополнительный код. Например:
if 'MICHAEL89' in map(lambda name: name.upper(), USERNAMES):
...
В этом случае мы формируем новый список со всеми элементами в USERNAMES
, преобразованный в верхний регистр, а затем сравниваем с этим новым списком.
Обновить
Как говорит @viraptor , лучше использовать генератор вместо map
. См. @Nathon ответ .
Обычно (по крайней мере, по крайней мере) вы формируете свой объект, чтобы вести себя так, как вы хотите. name in USERNAMES
не чувствителен к регистру, поэтому USERNAMES
необходимо изменить:
class NameList(object):
def __init__(self, names):
self.names = names
def __contains__(self, name): # implements `in`
return name.lower() in (n.lower() for n in self.names)
def add(self, name):
self.names.append(name)
# now this works
usernames = NameList(USERNAMES)
print someone in usernames
. Самое замечательное в том, что он открывает путь для многих улучшений без необходимости изменять какой-либо код вне класса , Например, вы можете изменить self.names
на набор для более быстрого поиска или вычислить (n.lower() for n in self.names)
только один раз и сохранить его в классе и т. Д. ...
str.casefold
рекомендуется для сопоставления строк без учета регистра. Решение @ nmichaels может быть адаптировано тривиально.
Используйте либо:
if 'MICHAEL89'.casefold() in (name.casefold() for name in USERNAMES):
Или:
if 'MICHAEL89'.casefold() in map(str.casefold, USERNAMES):
В соответствии с docs :
Casefolding похож на нижний, но более агрессивный, поскольку он предназначен для удаления всех различий в строках в строке. Например, немецкая строчная буква «ß» эквивалентна «ss». Так как это уже строчный регистр,
lower()
ничего не сделает для «ß»;casefold()
преобразует его в «ss».
if 'MICHAEL89' in (name.upper() for name in USERNAMES):
...
Альтернативно:
if 'MICHAEL89' in map(str.upper, USERNAMES):
...
Или, да, вы можете создать собственный метод.
[...]
создает весь список. (name.upper() for name in USERNAMES)
создаст только генератор и одну нужную строку за раз - огромную экономию памяти, если вы много выполняете эту операцию. (еще больше сбережений, если вы просто создаете список нижестоящих имен пользователей, которые вы повторно используете для проверки каждый раз)
– viraptor
2 September 2010 в 15:06
Вот один из способов:
if string1.lower() in string2.lower():
...
Я бы сделал обертку , чтобы вы не были инвазивны. Минимально, например ...:
class CaseInsensitively(object):
def __init__(self, s):
self.__s = s.lower()
def __hash__(self):
return hash(self.__s)
def __eq__(self, other):
# ensure proper comparison between instances of this class
try:
other = other.__s
except (TypeError, AttributeError):
try:
other = other.lower()
except:
pass
return self.__s == other
Теперь if CaseInsensitively('MICHAEL89') in whatever:
должен вести себя по мере необходимости (есть ли правая часть - список, dict или set). (Может потребоваться больше усилий для достижения аналогичных результатов для включения строк, во избежание предупреждений в некоторых случаях с участием unicode
и т. Д.).
CaseInsensitively('MICHAEL89') in {CaseInsensitively('Michael89'):True}
для этого, что, вероятно, не подпадает под «вести себя по мере необходимости».
– Gabe
2 September 2010 в 16:07
etc.
и «требует больше усилий» частей моего ответа ;-).
– Alex Martelli
2 September 2010 в 19:14
Вы можете сделать
matcher = re.compile('MICHAEL89', re.IGNORECASE)
filter(matcher.match, USERNAMES)
Обновление: немного поиграть, и я думаю, что вы можете получить лучший подход типа короткого замыкания, используя
matcher = re.compile('MICHAEL89', re.IGNORECASE)
if any( ifilter( matcher.match, USERNAMES ) ):
#your code here
ifilter
функция - из itertools, одного из моих любимых модулей в Python. Это быстрее, чем генератор, но только создает следующий элемент списка при вызове.
itertools
imap
. Это намного быстрее, чем генератор, но выполняет ту же цель. – wheaties 2 September 2010 в 15:24