Hi,
I would know if or how it could be done with regexes, but isn't the following
simple code a solution? It requires that the text be split up into separate
words. Or am I overlooking something?
>>word = 'ym'
>>> [letter for n, letter in enumerate(word) if letter > word[n-1]] ==
>>> list(word[1:])
False
>>word = 'almost'
>>> [letter for n, letter in enumerate(word) if letter > word[n-1]] ==
>>> list(word[1:])
True
Cheers!!
Albert-Jan
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All right, but apart from the sanitation, the medicine, education, wine, public
order, irrigation, roads, a fresh water system, and public health, what have
the Romans ever done for us?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>________________________________
>From: Dave Angel <d...@davea.name>
>To: Steven D'Aprano <st...@pearwood.info>
>Cc: tutor@python.org
>Sent: Saturday, November 5, 2011 2:49 AM
>Subject: Re: [Tutor] regexp
>
>On 11/04/2011 07:00 PM, Steven D'Aprano wrote:
>> Dinara Vakhitova wrote:
>>> Hello,
>>>
>>> I need to find the words in a corpus, which letters are in the alphabetical
>>> order ("almost", "my" etc.)
>>
>> Quoting Jamie Zawinski:
>>
>> Some people, when confronted with a problem, think "I know, I'll
>> use regular expressions." Now they have two problems.
>>
>> Now you have two problems: find words in the corpus which are in
>> alphabetical order, and get the damn regular expression to work correctly.
>>
>> Don't use a regex for this. It is much simpler to write a Python function to
>> solve it:
>>
>> def letters_in_order(astring):
>> """Return True if letters in astring are in alphabetical order.
>>
>> >>> letters_in_order("almost")
>> True
>> >>> letters_in_order("zoology")
>> False
>>
>> """
>> if len(astring) <= 1:
>> return True
>> for i in range(1, len(astring)):
>> if astring[i] < astring[i-1]:
>> # Pair of characters are out of order.
>> return False
>> # If none of the pairs are out of order, they whole string
>> # must be in order.
>> return True
>>
>> words = filter(letters_in_order, corpus)
>> for word in words:
>> print(word)
>>
>>
>>
>Seems to me it'd much simpler to do something like:
> return "".join(sorted(astring)) == astring
>
>with suitable adjustment if both lower and uppercase are desirable.
>
>--
>DaveA
>
>_______________________________________________
>Tutor maillist - Tutor@python.org
>To unsubscribe or change subscription options:
>http://mail.python.org/mailman/listinfo/tutor
>
>
>
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor