I am trying to figure out how to make the merge_sort algorithm with the use of double linked lists, but I am bumping into an error that says I need to use an extra positional argument (which I think is self).
This is the code:
Sorter
from ex16 import ex14
def merge_sort(numbers):
#if length of m <_ 1 then
#return m
if numbers.count() <= 1:
return numbers
#var left := empty list
left_list = ex14.DoubleLinkedList
#var right := empty list
right_list = ex14.DoubleLinkedList
#for each x with index i in m do
#if i < (length of m)/2 then
#add x to the left
#else
#add x to right
nodes = numbers.begin
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
while nodes:
if numbers.begin.data >= numbers.count():
left_list.create(numbers.begin)
else:
right_list.create(numbers.begin)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
nodes = nodes.next
# left := merge_sort(left)
leftmerged = merge_sort(left_list)
# right := merge_sort(right)
rightmerged = merge_sort(right_list)
#return merge(left, right)
return merge(leftmerged, rightmerged)
def merge(left, right):
#var result := empty list
result = []
#while left is not empty and right is not empty do:
#if first (left) <_ first(right) then:
#append first(left) to result
#left := rest(left)
#else:
#append first(right) to result
#right := rest(right)
while left > 1 and right > 1:
if left[0] <= right[0]:
result.append(left[0])
left = left[1:]
else:
result.append(right[0])
right = right[1:]
#while left is not empty do:
#append first(left) to result
#left := rest(left)
while left > 1:
result.append(left[0])
left = left[1:]
#append first(right) to result
# right := rest(right)
while right > 1:
result.append(right[0])
right = right[1:]
#return result
return result
doublelinkedlist with create function
class DoubleLinkedListNode(object):
def __init__(self, data):
self.data = data
self.next = None
self.prev = None
class DoubleLinkedList(object):
def __init__(self):
self.begin = None
self.end = None
test
from ex16 import sorting
from ex16 import ex14
from random import randint
max_numbers = 30
def test_merge_sort():
numbers = random_list(max_numbers)
sorting.merge_sort(numbers)
assert is_sorted(numbers)
The code that is not working is marked with arrows.
I get the following error:
TypeError: create() missing 1 required positional argument: ‘obj’
I am guessing that the extra argument it needs is the self, which I did not need to use when I was working in the module itself. However, if I type in self, I get the following error:
NameError: name ‘self’ is not defined
So what am I missing here?