Replacing an item in list with items of another list without using dictionaries
<p>I am developing a function in python. Here is my content:</p>

<pre><code>list = ['cow','orange','mango']
to_replace = 'orange'
replace_with = ['banana','cream']
</code></pre>

<p>So I want that my list becomes like this after replacement</p>

<pre><code>list = ['cow','banana','cream','mango']
</code></pre>

<p>I am using this function:</p>

<pre><code>def replace_item(list, to_replace, replace_with):
    for n,i in enumerate(list):
      if i== to_replace:
         list[n]=replace_with
    return list
</code></pre>

<p>It outputs the list like this:</p>

<pre><code>['cow', ['banana', 'cream'], 'mango']
</code></pre>

<p>So how do I modify this function to get the below output?</p>

<pre><code>list = ['cow','banana','cream','mango']
</code></pre>

<p>NOTE: I found an answer here: <a href="http://stackoverflow.com/questions/14962931/replacing-list-item-with-contents-of-another-list">Replacing list item with contents of another list</a>
but I don't want to involve dictionaries in this. I also want to modify my current function only and keep it simple and straight forward.</p>

<p>A simple way of representing a rule like this is with a generator, when the <code>to_replace</code> is seen different items are produced:</p>

<pre><code>def iter_replace(iterable, to_replace, replace_with):
    for item in iterable:
        if item == to_replace:
            yield from replace_with
        else:
            yield item
</code></pre>

<p>Then you can do <code>list(iter_replace(...))</code> to get the result you want, as long as you don't shadow the name <code>list</code>.  </p>

<pre><code>ls = ['cow','orange','mango']
to_replace = 'orange'
replace_with = ['banana','cream']

print(list(iter_replace(ls,to_replace,replace_with)))

# ['cow', 'banana', 'cream', 'mango']
</code></pre>

python list