Arrays/List, filters, Pytho, Ruby

Dan Stromberg drsalists at gmail.com
Fri Feb 11 17:38:51 EST 2011


On Fri, Feb 11, 2011 at 1:51 PM, Dan Stromberg <drsalists at gmail.com> wrote:
> On Fri, Feb 11, 2011 at 1:43 PM, André Roberge <andre.roberge at gmail.com> wrote:
>> On Friday, February 11, 2011 5:24:15 PM UTC-4, LL.Snark wrote:
>>> Hi,
>>>
>>> I'm looking for a pythonic way to translate this short Ruby code :
>>> t=[6,7,8,6,7,9,8,4,3,6,7]
>>> i=t.index {|x| x<t.first}
>>>
>>> If you don't know Ruby, the second line means :
>>> What is the index, in array t, of the first element x such that x<t[0].
>>>
>>> If can write it in python several ways :
>>> t=[6,7,8,6,7,9,8,4,3,6,7]
>>> i=0
>>> while t[i]>=t[0] : i+=1
>>>
>>> ... not pythonic I think...
>>>
>>> Or :
>>> t=[6,7,8,6,7,9,8,4,3,6,7]
>>> i=[j for j in range(len(t)) if t[j]<t[0]][0]
>>>
>>> ...too cryptic...
>>>
>> You could go with something like (untested)
>> t = [6,7,8,6,7,9,8,4,3,6,7]
>> for i, j in enumerate(t):
>>    if j < t[0]:
>>        break
>> else:
>>        i = 0
>>
>> ;-)
>>
>>
>>
>>> I'm using Python 3.
>>>
>>> Thx
>
>>>> t = [6,7,8,6,7,9,8,4,3,6,7]
>>>> generator = (element for element in t[1:] if element >= t[0])
>>>> print(next(generator))
>

Oops; a correction.  Fast and concise - and if you decide you need the
2nd or 10th, they'll be on their way as soon as you request them (lazy
evaluation):

>>> generator = (ind+1 for ind, element in enumerate(t[1:]) if element >= t[0])
>>> print(next(generator))



More information about the Python-list mailing list