I am aware of the fact that a sorted unidirectional list has only very few use cases, but nevertheless, this python code feels fairly long for Python code. How can I improve it?
class List:
def __init__(self, list):
self.first = list
def __repr__(self):
element = self.first
elementsList = ''
while (element != None):
elementsList += str(element) + '\n'
element = element.next
return elementsList
"""Searches for names in list, starts at 0, returns predecessor as object if possible, returns -1 if not found"""
def search(self, name):
if self.first.name == name:
return 0
else: return self.search_rec(self.first, name, 1)
"""Recursive workhorse for search"""
def search_rec(self, item, name, i):
if item.next != None:
if item.next.name == name:
return i, item.name
else:
return self.search_rec(item.next, name, i+1)
else: return -1
class Element:
"""Class to implement elements of the list"""
"""Append item to list or create one"""
def __init__(self, name, listPos=None):
if listPos != None:
listPos = listPos.parent.first
self.parent = listPos.parent
previous = None
while (listPos.name < name and listPos.next != None):
previous, listPos = listPos, listPos.next
if previous != None:
previous.next, self.next = self, listPos
else: self.parent.first = self
else:
self.parent = List(self)
self.name = name
self.next = listPos
def __del__(self):
print(repr(self) + ' dies now...')
def delete(self):
if (self == self.parent.first): self.parent.first = self.next
else:
listPos = self.parent.first
while (listPos.next != self):
listPos = listPos.next
if listPos.next.next != None: listPos.next = listPos.next.next
else: listPos.next = None
def __repr__(self):
return '[%s]' % self.name
def __str__(self):
if self.next != None:
next = 'Next element: ' + self.next.name
else:
next = '*end of the list*'
return repr(self) + '\n' + next
x = Element('test')
a = Element('d', x)
y = Element('c', x)
z = Element('a', x)
print(x.parent)
a.delete()
print(a.parent)
print(x.parent.search('c'))