Rozważ możliwości (1) znaków, które nie są literami i (2) liter, które w ogóle nie mają wielkości liter.
John Machin
Odpowiedzi:
173
Istnieje wiele metod „jest” w łańcuchach. islower()i isupper()powinien odpowiadać Twoim potrzebom:
>>> 'hello'.islower()
True>>> [m for m in dir(str) if m.startswith('is')]
['isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper']
Oto przykład użycia tych metod do sklasyfikowania listy ciągów:
>>> words = ['The', 'quick', 'BROWN', 'Fox', 'jumped', 'OVER', 'the', 'Lazy', 'DOG']
>>> [word for word in words if word.islower()]
['quick', 'jumped', 'the']
>>> [word for word in words if word.isupper()]
['BROWN', 'OVER', 'DOG']
>>> [word for word in words ifnot word.islower() andnot word.isupper()]
['The', 'Fox', 'Lazy']
cześć. dzięki za krótką odpowiedź. Ale jak sklasyfikować słowa pisane wielkimi literami? Na przykład: „Słowo mieszane”. Wydaje się, że trzeci przykład pasuje do wszystkich możliwych kombinacji mieszanych słów, przykład: „mIxEd WoRD” ..
Swadhikar,
10
'hello'.istitle ()
Stephen
1
Chcę zasygnalizować użycie remodułu do tego. Szczególnie w przypadku rozróżniania wielkości liter.
Używamy opcji re.IGNORECASE podczas kompilowania wyrażenia regularnego do użycia w środowiskach produkcyjnych z dużą ilością danych.
>>> import re
>>> m = ['isalnum','isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'ISALNUM', 'ISALPHA', 'ISDIGIT', 'ISLOWER', 'ISSPACE', 'ISTITLE', 'ISUPPER']
>>>
>>>
>>> pattern = re.compile('is')
>>>
>>> [word for word in m if pattern.match(word)]
['isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper']
Jednak staraj się zawsze używać inoperatora do porównywania ciągów, jak opisano szczegółowo w tym poście
Odpowiedzi:
Istnieje wiele metod „jest” w łańcuchach.
islower()
iisupper()
powinien odpowiadać Twoim potrzebom:>>> 'hello'.islower() True >>> [m for m in dir(str) if m.startswith('is')] ['isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper']
Oto przykład użycia tych metod do sklasyfikowania listy ciągów:
>>> words = ['The', 'quick', 'BROWN', 'Fox', 'jumped', 'OVER', 'the', 'Lazy', 'DOG'] >>> [word for word in words if word.islower()] ['quick', 'jumped', 'the'] >>> [word for word in words if word.isupper()] ['BROWN', 'OVER', 'DOG'] >>> [word for word in words if not word.islower() and not word.isupper()] ['The', 'Fox', 'Lazy']
źródło
Chcę zasygnalizować użycie
re
modułu do tego. Szczególnie w przypadku rozróżniania wielkości liter.Używamy opcji re.IGNORECASE podczas kompilowania wyrażenia regularnego do użycia w środowiskach produkcyjnych z dużą ilością danych.
>>> import re >>> m = ['isalnum','isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'ISALNUM', 'ISALPHA', 'ISDIGIT', 'ISLOWER', 'ISSPACE', 'ISTITLE', 'ISUPPER'] >>> >>> >>> pattern = re.compile('is') >>> >>> [word for word in m if pattern.match(word)] ['isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper']
Jednak staraj się zawsze używać
in
operatora do porównywania ciągów, jak opisano szczegółowo w tym pościeszybsza-operacja-re-match-or-str
Również szczegółowo opisane w jednej z najlepszych książek, od których można zacząć naukę Pythona
idiomatyczny-python
źródło