title: Remove a string that is a substring of other string in the list WITHOUT changing original order of the list?
body: <p>I have a list.</p>
  
  <pre><code>the_list = ['Donald Trump has', 'Donald Trump has small fingers', 'What is going on?']
  </code></pre>
  
  <p>I'd like to remove "Donald Trump has" from <code>the_list</code> because it's a substring of other list element.</p>
  
  <p>Here is an important part. I want to do this without distoring the order of the original list.</p>
  
  <p>The function I have (below)  distorts the order of the original list. Because it sorts the list items by its length first. </p>
  
  <pre><code>def substr_sieve(list_of_strings):  
      dups_removed = list_of_strings[:]
      for i in xrange(len(list_of_strings)):
          list_of_strings.sort(key = lambda s: len(s))
          j=0
          j=i+1
          while j &lt;= len(list_of_strings)-1:
              if list_of_strings[i] in list_of_strings[j]:
                  try:
                      dups_removed.remove(list_of_strings[i])
                  except:
                      pass
              j+=1
      return dups_removed
  </code></pre>