python3自己手写list,实现和系统list差不多的功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python3自己手写list,实现和系统list差不多的功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3415字,纯文字阅读大概需要5分钟。
内容图文
![python3自己手写list,实现和系统list差不多的功能](/upload/InfoBanner/zyjiaocheng/719/f0468963167944b1bc3943571c625363.jpg)
话不多说,上源码
# 自定义list
class Node:
def __init__(self, v, n):
self.value = v
self.next = n
class MyList:
def __init__(self, *args):
self.first_node = Node(None, None)
self.length = 1
for i in args:
self.append(i)
def __len__(self): # 重写len方法
return self.length - 1
def append(self, v): # 实现append方法
node = self.find_last_node()
node.next = Node(v, None)
self.length += 1
def find_last_node(self): # 找到第一个节点
node = self.first_node
if node is None:
return None
while True:
if node.next is None:
break
node = node.next
return node
def pop(self, index=-1): # 实现pop方法
if self.length <= 1:
return False
if index == -1:
index = self.length - 2
n = self.get(index)
next = n.next # 要删除元素的最后一个元素
pre = self.get(index - 1) # 要删除元素前面一个元素
pre.next = next
self.length -= 1
def get(self, index): # 找到node节点
index += 1
if index >= self.length:
return False
counter = 0
node = self.first_node
if counter == index:
return node
while counter != index:
counter += 1
# 找到下一个元素
node = node.next
return node
def getValue(self, index): # 下标获取值
index += 1
if index >= self.length:
return False
counter = 0
node = self.first_node
if counter == index:
return node
while counter != index:
counter += 1
# 找到下一个元素
node = node.next
return node.value
def __str__(self): # 实现打印[,,,]格式
string = "["
node = self.first_node.next
if node is not None:
v = node.value
string += str(v)
node = node.next
while node is not None:
string += ", " + str(node.value)
node = node.next
string += "]"
return string
def __getitem__(self, item):
if item == -1:
item = self.length - 2
node = self.get(item)
return node.value
def __delitem__(self, *args, **kwargs): # 改写方法,实现下标寻值
self.pop(args[0])
def count(self, v):
node = self.first_node.next
count = 0
while node is not None:
if v == node.value:
count += 1
node = node.next
return count
def index(self, v):
node = self.first_node.next
index = 0
while True:
if node is not None:
if v == node.value:
return index
else:
index += 1
node = node.next
else:
raise ValueError('{} is not in list'.format(v))
def insert(self, index, value):
count = 0
pre_node = self.first_node
while True:
if pre_node is None:
self.append(value)
break
if count == index:
next_node = pre_node.next
new_node = Node(value, None)
pre_node.next = new_node
new_node.next = next_node
self.length += 1
break
else:
count += 1
pre_node = pre_node.next
def clear(self):
self.first_node.next = None
self.length = 1
def remove(self, v):
index = self.index(v)
self.pop(index)
def reverse(self):
count = 0
while self.length-2 > count:
node = self.first_node.next
if node is None:
return
self.insert(self.length-1-count, node.value)
count += 1
self.pop(0)
def sort(self):
for i in range(self.length - 1):
node = self.get(i)
if type(node.value) == str:
raise TypeError("'{}' not supported between instances of 'int' and '{}'".format('>', 'str'))
if type(node.value) == list:
raise TypeError("'{}' not supported between instances of 'int' and '{}'".format('>', 'list'))
for i in range(self.length-1):
is_sort = False
j = 0
while j < self.length - 2 - i:
node = self.get(j)
node1 = self.get(j+1)
if node.value > node1.value:
node.value, node1.value = node1.value, node.value
is_sort = True
j += 1
if not is_sort:
break
def __gt__(self, other): # 重写大于号
return self.length > other.length
def __add__(self, other): # 重写加法
new_list = MyList()
len1 = len(self)
len2 = len(other)
for i in range(len1):
new_list.append(self.getValue(i))
for j in range(len2):
new_list.append(other.getValue(j))
return new_list
内容总结
以上是互联网集市为您收集整理的python3自己手写list,实现和系统list差不多的功能全部内容,希望文章能够帮你解决python3自己手写list,实现和系统list差不多的功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。