[Python-checkins] Improve clarity (and small speed-up) by using tuple unpacking (#3289)

Raymond Hettinger webhook-mailer at python.org
Mon Sep 4 14:48:00 EDT 2017


https://github.com/python/cpython/commit/1bfbe78b03e6ee3ee7de938b5e39015dd08b0302
commit: 1bfbe78b03e6ee3ee7de938b5e39015dd08b0302
branch: master
author: Raymond Hettinger <rhettinger at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2017-09-04T11:47:58-07:00
summary:

Improve clarity (and small speed-up) by using tuple unpacking (#3289)

files:
M Lib/heapq.py

diff --git a/Lib/heapq.py b/Lib/heapq.py
index 0b3e89a3a97..b31f4186cf6 100644
--- a/Lib/heapq.py
+++ b/Lib/heapq.py
@@ -498,10 +498,10 @@ def nsmallest(n, iterable, key=None):
         for elem in it:
             if elem < top:
                 _heapreplace(result, (elem, order))
-                top = result[0][0]
+                top, _order = result[0]
                 order += 1
         result.sort()
-        return [r[0] for r in result]
+        return [elem for (elem, order) in result]
 
     # General case, slowest method
     it = iter(iterable)
@@ -516,10 +516,10 @@ def nsmallest(n, iterable, key=None):
         k = key(elem)
         if k < top:
             _heapreplace(result, (k, order, elem))
-            top = result[0][0]
+            top, _order, _elem = result[0]
             order += 1
     result.sort()
-    return [r[2] for r in result]
+    return [elem for (k, order, elem) in result]
 
 def nlargest(n, iterable, key=None):
     """Find the n largest elements in a dataset.
@@ -559,10 +559,10 @@ def nlargest(n, iterable, key=None):
         for elem in it:
             if top < elem:
                 _heapreplace(result, (elem, order))
-                top = result[0][0]
+                top, _order = result[0]
                 order -= 1
         result.sort(reverse=True)
-        return [r[0] for r in result]
+        return [elem for (elem, order) in result]
 
     # General case, slowest method
     it = iter(iterable)
@@ -577,10 +577,10 @@ def nlargest(n, iterable, key=None):
         k = key(elem)
         if top < k:
             _heapreplace(result, (k, order, elem))
-            top = result[0][0]
+            top, _order, _elem = result[0]
             order -= 1
     result.sort(reverse=True)
-    return [r[2] for r in result]
+    return [elem for (k, order, elem) in result]
 
 # If available, use C implementation
 try:



More information about the Python-checkins mailing list