Benjamin Goudey <[EMAIL PROTECTED]> writes: > For example, if my original list is [0,0,1,2,1,0,0] I would like to > produce the lists [1,2,1] (the non zero values) and [2,3,4] (indices > of where the non-zero values used to be). Removing non-zero values > is very easy but determining the indicies is where I'm having > difficulty.
The built-in 'enumerate' function is made for this. Creating the new list can be done efficiently and clearly with a list comprehension. Further, presumably you want to do further operations on these new series of data; wouldn't it be better to have the values and original indices actually correlated together? This code produces a two-element tuple for each original non-zero value: >>> sparse_data = [0, 0, 1, 2, 1, 0, 0] >>> nonzero_data = [(index, value) ... for (index, value) in enumerate(sparse_data) ... if value != 0] >>> nonzero_data [(2, 1), (3, 2), (4, 1)] >>> for (index, value) in nonzero_data: ... print "Value %(value)r was originally at index %(index)r" % vars() ... Value 1 was originally at index 2 Value 2 was originally at index 3 Value 1 was originally at index 4 -- \ “Experience is that marvelous thing that enables you to | `\ recognize a mistake when you make it again.” —Franklin P. Jones | _o__) | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list