diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py
index d071bb4751d4..f4d63d3cfeb2 100755
--- a/lib/mpl_toolkits/mplot3d/axes3d.py
+++ b/lib/mpl_toolkits/mplot3d/axes3d.py
@@ -11,6 +11,8 @@
 """
 
 import warnings
+from operator import itemgetter
+
 import matplotlib.axes as maxes
 from matplotlib.axes import Axes, rcParams
 from matplotlib import cbook
@@ -244,16 +246,14 @@ def draw(self, renderer):
         # Calculate projection of collections and zorder them
         zlist = [(col.do_3d_projection(renderer), col) \
                  for col in self.collections]
-        zlist.sort()
-        zlist.reverse()
+        zlist.sort(key=itemgetter(0), reverse=True)
         for i, (z, col) in enumerate(zlist):
             col.zorder = i
 
         # Calculate projection of patches and zorder them
         zlist = [(patch.do_3d_projection(renderer), patch) \
                 for patch in self.patches]
-        zlist.sort()
-        zlist.reverse()
+        zlist.sort(key=itemgetter(0), reverse=True)
         for i, (z, patch) in enumerate(zlist):
             patch.zorder = i
 
@@ -568,7 +568,7 @@ def set_xlim3d(self, left=None, right=None, emit=True, auto=False, **kw):
         if kw:
             raise ValueError("unrecognized kwargs: %s" % kw.keys())
 
-        if right is None and iterable(left):
+        if right is None and cbook.iterable(left):
             left, right = left
 
         self._process_unit_info(xdata=(left, right))
@@ -623,7 +623,7 @@ def set_ylim3d(self, bottom=None, top=None, emit=True, auto=False, **kw):
         if kw:
             raise ValueError("unrecognized kwargs: %s" % kw.keys())
 
-        if top is None and iterable(bottom):
+        if top is None and cbook.iterable(bottom):
             bottom, top = bottom
 
         self._process_unit_info(ydata=(bottom, top))
@@ -677,7 +677,7 @@ def set_zlim3d(self, bottom=None, top=None, emit=True, auto=False, **kw):
         if kw:
             raise ValueError("unrecognized kwargs: %s" % kw.keys())
 
-        if top is None and iterable(bottom):
+        if top is None and cbook.iterable(bottom):
             bottom, top = bottom
 
         self._process_unit_info(zdata=(bottom, top))
@@ -1425,7 +1425,7 @@ def set_zbound(self, lower=None, upper=None):
         .. versionadded :: 1.1.0
             This function was added, but not tested. Please report any bugs.
         """
-        if upper is None and iterable(lower):
+        if upper is None and cbook.iterable(lower):
             lower,upper = lower
 
         old_lower,old_upper = self.get_zbound()