Python Forum

Full Version: Adding two lists
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
So I'm trying to add two lists together with integers in the lists. In both lists there are strings with "null". I want to add the two lists together, but i want the null values of list 1 to be filled with the values that aren't "null" in list 2.

list1 = [5,6,'null',1,'null']
list2 = ['null','null',3,'null',8]

prefered_output = [5,6,3,1,8]
I hope you guys can help :)
There are several possible solutions to that. What have you tried so far?
Post your code attempt and we will let you know how to correct it to make it work right.
This is what i have tried until now

list1 = [5,6,'null',1,'null']
list2 = ['null','null',3,'null',8]
 
#prefered_output = [5,6,3,1,8]
prefered_output = []
for n in range(0, len(list1)-1):
    if type(list1[n]) != int:
        prefered_output[n] = list1[n]
    else:
        prefered_output[n] = list2[n]
However this gives an error: IndexError: list assignment index out of range
for n in range(0, len(list1)-1)
This is not Pythonic, instead it is better to use enumerate():
for index, item in enumerate(list1):
On each iteration, "index" will be what you wanted "n" to be, and "item" will be an item from "list1".
You can see how it works with this:
for index, item in enumerate(list1):
    print(index, item)
And the list assignment error happens because you start with an empty list (prefered_output) and append to an uninitiated index. Instead use list's .append() method.
Hey man thank you! i figured it out! This is my code now

list1 = [5,6,'null',1,'null']
list2 = ['null','null',3,'null',8]
 
#prefered_output = [5,6,3,1,8]
prefered_output = []
for index, item in enumerate(list1):
    print(index, item)
    if type(list1[index]) != int:
        prefered_output.append(list2[index]) 
    else:
        prefered_output.append(list1[index])

print(prefered_output)
Thanks again :)
Why use indexing at all - when you have zip?
[val2 if val1 == 'null' else val1 for val1, val2 in zip(list1, list2)]

PS Recommended form to check type - isinstance

if isinstance(value, int):
.....