上周日教导一个科班非技术的朋友学习 Python 编程。他的 Python 水平大概就是看了几篇短的 Python 介绍博客、会流程控制和全局函数编写。
具体教导思路是从自己实现一个链表出发,研究学习 Python 数据结构、接口、算法的实现和运用、然后:

  1. 学会画图表达对象之间的关联、数据结构的操作、并实现它。
  2. 慢慢用 Python 的特性去优化链表、学习 Python 特性与最佳实践;
  3. 刷 Leetcode 链表题目、锻炼思维;
  4. 熟悉之后、在进行二叉排序树的 0、1、2。

昨天算是实现了一个带遍历、插入、删除的 LinkedList。但是写的很长、大概用到的“新”特性只有 Python 的类。

今天打算让他快速前进,尝试拔苗助长ing:

  1. 理解成员函数的self、了解函数的默认参数;
  2. 理解抛出异常的代码写法和运行现象;
  3. 还有再学习一下类的特殊方法 __len____str__
  4. 理解鸭子类型:
    • Python 有个逻辑:不管你是什么动物,会嘎嘎叫的就是鸭子;
    • 你想想看 ListLink.head 和 Node.next 是不是一个东西?
    • 可不可以起成同一个名字 把它当成嘎嘎叫方法 (next),从而简化我们的代码;
    • 如果把 ListLink 当作鸭子类,那么Node也是一个鸭子类;
    • 关键:Node 和 ListLink 一样,也有 next 属性;两者的 next 属性的性质一样,要么是 None,要么是一个有 data 有 next 的对象;
    • 另一种理解:链表第一个结点之后的部分还是一个完整的链表。
  5. 理解函数是一等公民 -- 下面代码还没实现、因为已经有 __iter__ 了没有必要了。

个人感觉4讲早了,但是看他写的又长又臭,忍不住不教。

代码:

class Stack:class Node:def __init__(self, data, next = None):self.data = dataself.next = nextdef __init__(self):self.next = Nonedef push(self, data = None, index = 0):if index < 0 or index > len(self):raise IndexError("Given index is invalid.")cur = selffor i in range(index):cur = cur.nextcur.next = Node(data, cur.next)def pop(self, index = 0):if index < 0 or index >= len(self):raise IndexError("Given index is invalid.")cur = selffor i in range(index):cur = cur.nextretval = cur.next.datacur.next = cur.next.nextreturn retvaldef __iter__(self):cur = selfwhile cur.next is not None:yield cur.next.datacur = cur.nextdef __len__(self):len = 0cur = selfwhile cur.next is not None:len = len + 1cur = cur.nextreturn lendef __str__(self):cur = selfif cur.next is None:return "[]"st = "["            while cur.next.next is not None:st = st + str(cur.next.data) + ", "cur = cur.nextst = st + str(cur.next.data) + "]"return st

测试:

s = Stack()
print(s)
s.push(1)
print(s)
s.push(0.5)
print(s)
s.push(1.5, 1)
print(s)
s.push(2, 3)
print(s)
print(s.pop())
print(s)
print(s.pop(2))
print(s)

输出:

[]
[1]
[0.5, 1]
[0.5, 1.5, 1]
[0.5, 1.5, 1, 2]
0.5
[1.5, 1, 2]
2
[1.5, 1]

转载于:https://www.cnblogs.com/tjua/p/10486491.html

Python Linked List相关推荐

  1. 面试官问面向对象特点_最好的面试官有什么共同点?

    面试官问面向对象特点 by Aline Lerner 通过艾琳·勒纳(Aline Lerner) 最好的面试官有什么共同点? 我们查看了成千上万的真实访谈以找出答案. (What do the bes ...

  2. LeetCode 369. Plus One Linked List--链表--C++,Python解法

    题目地址:Plus One Linked List - LeetCode Given a non-negative integer represented as non-empty a singly ...

  3. LeetCode 142. Linked List Cycle II--单向链表成环的起点--C++,Python解法

    题目地址:Linked List Cycle II - LeetCode Given a linked list, return the node where the cycle begins. If ...

  4. LeetCode 141. Linked List Cycle--面试编程题--C++,Python解法

    题目地址:Linked List Cycle - LeetCode Given a linked list, determine if it has a cycle in it. To represe ...

  5. LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List--转换二叉树为双向链表--Java,C++,Python解法

    题目地址:Convert Binary Search Tree to Sorted Doubly Linked List - LeetCode Convert a BST to a sorted ci ...

  6. Python数据结构之链表(linked list)

    Python数据结构之链表 一.链表的基本知识 最近在leetcode刷题时遇到了几道关于链表的题,于是恶补了一下关于链表的知识.什么是链表?熟悉python语法的同学肯定都知道list,但是这并不是 ...

  7. python中的列表是采用链式结构实现的_Python数据结构与算法之列表(链表,linked list)简单实现...

    Python数据结构与算法之列表(链表,linked list)简单实现 Python 中的 list 并不是我们传统(计算机科学)意义上的列表,这也是其 append 操作会比 insert 操作效 ...

  8. install python 3.5.0_Mac 下安装Python3.5出现“python3-3.5.0 already installed, it's just not linked”错误...

    1.在Mac下用Homebrew安装Python3.5(Mac 自带的Python是2.7) brew install python3 2.安装完成之后发现出错了 Error: An unexpect ...

  9. LeetCode Notes_#206 Reverse Linked List(C++,Python)

    LeetCode Notes_#206 Reverse Linked List(C++,Python) LeetCode Linked List  Contents 题目 思路 思考 解答 C++ P ...

最新文章

  1. Eclipse生成jar文件
  2. 10 年 bloger 教你如何优雅玩转博客!
  3. 北京联合大学计算机学院在哪个校区,北京联合大学各校区联系地址大全
  4. 分区裁剪 oracle,[讨论]分区表并行和剪裁的困惑
  5. linux进程号为一,一步步探究linux进程中的用户ID
  6. AJAX 带有 取消功能的 UpdateProgress
  7. 02. Prefer consts, enums, and inlines to #defines
  8. linux文件系统与sysfs,Linux设备模型与Sysfs文件系统.doc
  9. c语言如何注释一段代码,如何在C语言注释一段代码?【C++培训】
  10. u8反启用固定资产_用友怎么取消固定资产模块
  11. c++第二课 输出自定义字符图形
  12. MCTS (Monte Carlo Tree Search)
  13. 《英文科技论文写作与学术报告》网课第一章作业答案
  14. python解法:【PAT520砖石争霸赛】7-2真的恭喜你(10)
  15. 《python深度学习》学习笔记与代码实现(第八章:8.1,8.2,8.3)
  16. 使用hotspot/cpuperf进行CPU占用分析
  17. 【吐槽脑洞】关于逛B站时偶然体验的弹幕互动游戏魏蜀吴三国争霸游戏的一些思考
  18. json序列化 java对象_Json 数据反序列化为Java对象
  19. 广东省地铁行业发展现状与动态前景评估报告2022版
  20. 乐山市计算机学校的董事长是,乐山市计算机学校庆祝建校25周年

热门文章

  1. 【深度优先搜索笔记】抽象DFS
  2. 2012年软件开发者薪资调查报告
  3. android 内核裁剪概述,Android内核的编译与裁剪
  4. Tomcat设置session超时的几种方式
  5. Eclipse、IntelliJ IDEA、TortoiseSVN清除svn帐号
  6. io 错误: socket closed_Tomcat NIO(9)IO线程Overall流程和关键类
  7. osg加载osgb数据_铁路工程三维协同大数据云平台研究与开发
  8. JQueryDOM之属性操作
  9. 电脑主板接口_如何看电脑主板 M.2 接口是支持 SATA 还是 NVMe 固态硬盘?
  10. 贪心法——LeetCode 402 移除K个数字