I have:
d = [1,'q','3', None, 'temp']
I want to replace None value to 'None' or any string
expected effect:
d = [1,'q','3', 'None', 'temp']
a try replace in string and for loop but I get error:
TypeError: expected a character buffer object
asked Oct 14, 2013 at 15:36
2
Use a simple list comprehension:
['None' if v is None else v for v in d]
Demo:
>>> d = [1,'q','3', None, 'temp']
>>> ['None' if v is None else v for v in d]
[1, 'q', '3', 'None', 'temp']
Note the is None
test to match the None
singleton.
answered Oct 14, 2013 at 15:36
Martijn Pieters♦Martijn Pieters
987k274 gold badges3881 silver badges3239 bronze badges
0
You can simply use map
and convert all items to strings using the str
function:
map[str, d]
#['1', 'q', '3', 'None', 'temp']
If you only want to convert the None
values, you can do:
[str[di] if di is None else di for di in d]
answered Oct 14, 2013 at 15:44
0
Starting Python 3.6 you can do it in shorter form:
d = [f'{e}' for e in d]
hope this helps to someone since, I was having this issue just a while ago.
answered Sep 29, 2017 at 12:42
UzzyUzzy
4218 silver badges15 bronze badges
2
Using a lengthy and inefficient however beginner friendly for loop it would look like:
d = [1,'q','3', None, 'temp']
e = []
for i in d:
if i is None: #if i == None is also valid but slower and not recommended by PEP8
e.append["None"]
else:
e.append[i]
d = e
print d
#[1, 'q', '3', 'None', 'temp']
Only for beginners, @Martins answer is more suitable in means of power and efficiency
answered Oct 14, 2013 at 15:42
K DawGK DawG
12.8k9 gold badges33 silver badges65 bronze badges
4
List comprehension is the right way to go, but in case, for reasons best known to you, you would rather replace it in-place rather than creating a new list [arguing the fact that python list is mutable], an alternate approach is as follows
d = [1,'q','3', None, 'temp', None]
try:
while True:
d[d.index[None]] = 'None'
except ValueError:
pass
>>> d
[1, 'q', '3', 'None', 'temp', 'None']
answered Oct 14, 2013 at 15:43
AbhijitAbhijit
60.1k18 gold badges126 silver badges197 bronze badges
I did not notice any answer using lambda..
Someone who wants to use lambda....[Look into comments for explanation.]
#INPUT DATA
d =[1,'q','3', None, 'temp']
#LAMBDA TO BE APPLIED
convertItem = lambda i : i or 'None'
#APPLY LAMBDA
res = [convertItem[i] for i in d]
#PRINT OUT TO TEST
print[res]
answered Jun 29, 2020 at 3:34
Pavan ChandakaPavan Chandaka
10.8k5 gold badges24 silver badges32 bronze badges
My solution was to match for None
and replace
it.
def fixlist[l: list]:
for i, v in enumerate[l]:
if v is None:
l[i] = 0
answered Jul 17 at 10:55
0