<br><br><div class="gmail_quote">On Tue, Jun 16, 2009 at 8:52 AM, Abhishek Tiwari <span dir="ltr"><<a href="mailto:tiwariabhishekin@gmail.com">tiwariabhishekin@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="gmail_quote">
<div><font color="#990000"><b>Question :</b></font></div>
<div>The first list contains some items, and the second list contains their value (higher is better).</div>
<div> </div>
<div>items = [apple, car, town, phone] </div>
<div>values = [5, 2, 7, 1] </div>
<div> </div>
<div>Show how to sort the 'items' list based on the 'values' list so that you end up with the following two lists:</div>
<div> </div>
<div>items = [town, apple, car, phone] </div>
<div>values = [7, 5, 2, 1] </div>
<div> </div>
<div><font color="#000099"><b>Ans. 1</b></font> </div>
<div> </div>
<div>values, items = list(zip(*sorted(zip(values,items), reverse=True)))</div>
<div> </div>
<div><font color="#000099"><b>Ans. 2</b></font> </div>
<div>new_values = sorted(values, reverse=True)</div>
<div>new_items = [items[x] for x in map(values.index,new_values)]</div>
<div> </div>
</div></blockquote><div><br>I would use a dict to store the values: {1:'phone', 5:'apple', 2:'car', 7:'town'} - then you just use sorted(mydict.keys(), reverse=True) to access them in a big-endian (most important) first, or without reverse if I wanted the least important value. This assumes that you can't have two values of the same weight, of course. <br>
<br>If you're looking for speed, I'd look at timeit: <a href="http://docs.python.org/library/timeit.html">http://docs.python.org/library/timeit.html</a><br><br>I don't know which is considered more pythonic, though, so I'm afraid I can't be of much more help than that.<br>
<br>HTH,<br>Wayne<br></div></div><br>