On Thu, 31 Mar 2016 03:52 am, Random832 wrote: > Like, these are common patterns: > > for i, x in enumerate(l): > # do some stuff, sometimes assign l[i] > > for k, v in d.items(): > # do some stuff, sometimes assign d[k]
for a, b in zip(spam, eggs): # do some stuff, sometimes assign x[a] or b[a] or who knows what? Does this mean that "lists, dicts and zip" should all support the same interface? Not every coincidental and trivial piece of similar code is actually related. > A way to apply that pattern generically to an object which may be either > a sequence or a mapping might be nice. Nice, and easy. # Duck-typing version. def iterpairs(obj): if hasattr(obj, 'items'): it = obj.items else: it = enum(obj) yield from it # Type-checking version. def iterpairs(obj): if isinstance(obj, collections.abc.Mapping): it = obj.items elif isinstance(obj, collections.abc.Sequence): it = enum(obj) else: raise TypeError('not a sequence or a mapping') yield from it Pick which one you prefer, stick it in your own personal toolbox of useful utilities functions, and off you go. -- Steven -- https://mail.python.org/mailman/listinfo/python-list