icmp - should this go in itertools?

Diez B. Roggisch deets at nospam.web.de
Sat Nov 26 13:14:11 CET 2005


Tom Anderson wrote:
> Hi all,
> 
> This is a little function to compare two iterators:
> 
> 
> 
> def icmp(a, b):
>     for xa in a:
>         try:
>             xb = b.next()
>             d = cmp(xa, xb)
>             if (d != 0):
>                 return d
>         except StopIteration:
>             return 1
>     try:
>         b.next()
>         return -1
>     except StopIteration:
>         return 0
> 
> 
> 
> It's modelled after the way cmp treats lists - if a and b are lists, 
> icmp(iter(a), iter(b)) should always be the same as cmp(a, b).
> 
> Is this any good? Would it be any use? Should this be added to itertools?

Whilst not a total itertools-expert myself, I have one little objection 
with this: the comparison won't let me know how many items have been 
consumed. And I end up with two streams that lack some common prefix 
plus one field. I'm just not sure if there is any usecase for that.

However, _if_ there is one, I'm all for adding it to itertools - it 
seems to be in the appropriate spirit.

Regards,

Diez



More information about the Python-list mailing list