Function to determine list max without itertools
Sayth Renshaw
flebber.crue at gmail.com
Thu Apr 18 00:10:46 EDT 2019
wrote:
> >
> >
> > I have created a function that takes a list as an argument.
> > Without using itertools I want to compare each item in the list to find the max.
> >
> > However instead of the max I keep getting the last item in the list. Where is my logic wrong here?
> >
> > def maximum(listarg):
> > items = list(listarg)
> > myMax = 0
> > for index, item in enumerate(items):
> > for otheritem in items[index + 1 :]:
> > if item < otheritem:
> > myMax = otheritem
> > elif item > otheritem:
> > myMax = item
> > else:
> > myMax = myMax
> >
> > Seems like it should work but doesn't.
> >
>
> I'd recommend rethinking your algorithm first, and then thinking about
> debugging your actual code. You should be able to find the largest in
> a collection without making many many passes over the items - a single
> pass should be sufficient.
>
> ChrisA
Most I am finding either use the max function or itertools. Both of which I am trying not to use so that I actually do it myself.
This one on SO is where I was going https://stackoverflow.com/a/3990826/461887
def maxelements(seq):
''' Return list of position(s) of largest element '''
max_indices = []
if seq:
max_val = seq[0]
for i,val in ((i,val) for i,val in enumerate(seq) if val >= max_val):
if val == max_val:
max_indices.append(i)
else:
max_val = val
max_indices = [i]
return max_indices
This is probably the nicest one but still uses Max.
>>> a=[5,4,3,2,1]
>>> def eleMax(items, start=0, end=None):
... return max(items[start:end])
Thanks
Sayth
More information about the Python-list
mailing list