python list replace only if it is a exact match using list comprehension

Viewed 414

I have the following list :-

list= ['order','orderNumber']

I want enclose order in double_quotes "order" not orderNumber I tried the below in list comprehension

if 'order' in list:
     list = [item.replace('order', '"' + 'order' + '"') for item in list]

But the output is :- order from orderNumber is also getting enclosed with double quotes which is not needed

['"order"', '"order"Number']

Exepected Output is :-

['"order"', 'orderNumber']

3 Answers

You should use == operator and not in as:

lst = ['order','orderNumber']
lst = [f'"{elt}"' if elt == 'order' else elt for elt in lst]
print(lst)

Also, don't use list for object names.


Update: Use concatenation operator + for Python version less that 3.6 that don't support fstrings.

lst = ['order','orderNumber']
lst = ['"{}"'.format(elt) if elt == 'order' else elt for elt in lst]
print(lst)

You could use a regular expression and re.sub:

>>> import re
>>> lst = ['order', 'orderNumber']
>>> [re.sub('^order$', '"order"', item) for item in lst]
>>> ['"order"', 'orderNumber']

Could you please check if the below works for you

lista = ['order','orderNumber']
listb = []
if 'order' in lista:
    for item in lista:
        if item == 'order':
            listb.append(item.replace('order', '"' + 'order' + '"'))
        else:
            listb.append(item)
lista = listb
Related