title: Is there a reason why append and insert are both there?
body: <p>I'm surely not the Python guru I'd like to be and I mostly learn studying/experimenting in my spare time, it is very likely I'm going to make a trivial question for experienced users... yet, I really want to understand and this is a place that helps me a lot.</p>
  
  <p>Now, after the due premise, Python documentation says:</p>
  
  <blockquote>
    <p>4.6.3. Mutable Sequence Types</p>
    
    <p>s.append(x) appends x to the end of the sequence (same as
     s[len(s):len(s)] = [x])   </p>
    
    <p>[...]</p>
    
    <p>s.insert(i, x) inserts x into s at the index given by i (same as
    s[i:i] = [x])</p>
  </blockquote>
  
  <p>and, moreover:</p>
  
  <blockquote>
    <p>5.1. More on Lists</p>
    
    <p>list.append(x)  Add an item to the end of the list. Equivalent to
     a[len(a):] = [x].</p>
    
    <p>[...]</p>
    
    <p>list.insert(i, x)  Insert an item at a given position. The first
     argument is the index of the element before which to insert, so
     a.insert(0, x) inserts at the front of the list, and <strong>a.insert(len(a),
     x) is equivalent to a.append(x)</strong>.</p>
  </blockquote>
  
  <p>So now I'm wondering <em>why there are two methods to do, basically, the same thing</em>? Wouldn't it been possible (and simpler) to have just one <code>append/insert(x, i=len(this))</code> where the <code>i</code> would have been an optional parameter and, when not present, would have meant add to the end of the list?</p>