diff --git a/src/punctuated.rs b/src/punctuated.rs
index ac6492a..25bcfc3 100644
--- a/src/punctuated.rs
+++ b/src/punctuated.rs
@@ -361,6 +361,12 @@
     }
 }
 
+impl<'a, T, P> ExactSizeIterator for Pairs<'a, T, P> {
+    fn len(&self) -> usize {
+        self.inner.len() + self.last.len()
+    }
+}
+
 /// An iterator over mutably borrowed pairs of type `Pair<&mut T, &mut P>`.
 ///
 /// Refer to the [module documentation] for details about punctuated sequences.
@@ -382,6 +388,12 @@
     }
 }
 
+impl<'a, T, P> ExactSizeIterator for PairsMut<'a, T, P> {
+    fn len(&self) -> usize {
+        self.inner.len() + self.last.len()
+    }
+}
+
 /// An iterator over owned pairs of type `Pair<T, P>`.
 ///
 /// Refer to the [module documentation] for details about punctuated sequences.
@@ -403,6 +415,12 @@
     }
 }
 
+impl<T, P> ExactSizeIterator for IntoPairs<T, P> {
+    fn len(&self) -> usize {
+        self.inner.len() + self.last.len()
+    }
+}
+
 /// An iterator over owned values of type `T`.
 ///
 /// Refer to the [module documentation] for details about punctuated sequences.
@@ -424,13 +442,19 @@
     }
 }
 
+impl<T, P> ExactSizeIterator for IntoIter<T, P> {
+    fn len(&self) -> usize {
+        self.inner.len() + self.last.len()
+    }
+}
+
 /// An iterator over borrowed values of type `&T`.
 ///
 /// Refer to the [module documentation] for details about punctuated sequences.
 ///
 /// [module documentation]: index.html
 pub struct Iter<'a, T: 'a> {
-    inner: Box<Iterator<Item = &'a T> + 'a>,
+    inner: Box<ExactSizeIterator<Item = &'a T> + 'a>,
 }
 
 struct PrivateIter<'a, T: 'a, P: 'a> {
@@ -457,6 +481,12 @@
     }
 }
 
+impl<'a, T> ExactSizeIterator for Iter<'a, T> {
+    fn len(&self) -> usize {
+        self.inner.len()
+    }
+}
+
 impl<'a, T, P> Iterator for PrivateIter<'a, T, P> {
     type Item = &'a T;
 
@@ -468,13 +498,19 @@
     }
 }
 
+impl<'a, T, P> ExactSizeIterator for PrivateIter<'a, T, P> {
+    fn len(&self) -> usize {
+        self.inner.len() + self.last.len()
+    }
+}
+
 /// An iterator over mutably borrowed values of type `&mut T`.
 ///
 /// Refer to the [module documentation] for details about punctuated sequences.
 ///
 /// [module documentation]: index.html
 pub struct IterMut<'a, T: 'a> {
-    inner: Box<Iterator<Item = &'a mut T> + 'a>,
+    inner: Box<ExactSizeIterator<Item = &'a mut T> + 'a>,
 }
 
 struct PrivateIterMut<'a, T: 'a, P: 'a> {
@@ -490,6 +526,12 @@
     }
 }
 
+impl<'a, T> ExactSizeIterator for IterMut<'a, T> {
+    fn len(&self) -> usize {
+        self.inner.len()
+    }
+}
+
 impl<'a, T, P> Iterator for PrivateIterMut<'a, T, P> {
     type Item = &'a mut T;
 
@@ -501,6 +543,12 @@
     }
 }
 
+impl<'a, T, P> ExactSizeIterator for PrivateIterMut<'a, T, P> {
+    fn len(&self) -> usize {
+        self.inner.len() + self.last.len()
+    }
+}
+
 /// A single syntax tree node of type `T` followed by its trailing punctuation
 /// of type `P` if any.
 ///
