当前位置: 首页 > news >正文

Python基础-引用参数、斐波那契数列、无极分类

1.引用参数的问题

(1)列表(list)

  • 引用参数,传地址的参数,即list1会因list2修改而改变。
list1 = [1,2,3,4]
list2 = list1
print(list1)
list2[2] = 1
print(list2)
print(list1)
  • 非引用参数,不传地址的参数,即list1不会因list2修改而改变。
list1 = [1,2,3,4]
list2 = list1[:] #原理:复制了(遍历list1)一份list1再赋值给list2
print(list1)
list2[2] = 1
print(list2)
print(list1)

(2)字典(Dictionary)

  • 引用参数,传地址的参数,即dict1会因dict2修改而改变。
dict1 ={'name':'deng','age':18,'sex':1}
dict2 = dict1
print(dict1)
dict2['name'] = 'xiaodeng'
print(dict2)
print(dict1)
  • 非引用参数,不传地址的参数,即dict1不会因dict2修改而改变。
dict1 ={'name':'deng','age':18,'sex':1}
dict2 = {k:dict1[k] for k in dict1}  #原理:复制一份(遍历dict1)再拷贝给dict2
print(dict1)
dict2['name'] = 'xiaodeng'
print(dict2)
print(dict1)

(3)列表集合(set)

  • 引用参数,传地址的参数,即set1会因set2修改而改变。
set1 = set([1,2,3,4])  
set2= set1
print(set1)
set2.add(5)
print(set2)
print(set1)
  • 非引用参数,不传地址的参数,即set1不会因set2修改而改变。
set1 = set([1,2,3,4])  #列表集合的引用参数()
s = list(set1)    # s=[1,2,3,4]  强制将集合set类型转化为列表list(因为列表才能进行遍历复制)
set2 = set(s[:])  # set2=([1,2,3,4])  再将列表list强制转化回集合set类型
print(set1)
set2.add(5)
print(set2)
print(set1)

2.斐波那契数列

这里我使用一个实例问题进行分享:

兔子种群数量问题:
假设一对兔子一个月能生出一对兔子,出生的一对兔子到能够生育新的兔子需要1个月的时间。那如果一
个年之后这最开始这对兔子可以产生的种群兔子数量是多少呢?
在这里插入图片描述
从上面可以得到一个规律除了1月跟2月以外其它月的兔子对数是前两个月之和:
比如:3月的兔子数量就是1月跟2月数量之和,其它也是一样的。

解决方案:
(1)使用迭代来完成上面的运算:

def getNumber(n = 12):n1 = 1  # n1代表n-2这个月兔子的数量n2 = 1  # n2代表n-1这个月兔子的数量n3 = 1  # n3代表n这个月兔子的数量# 使用循环完成计算while n > 2:# print(n)n3 = n1 + n2    # n月的兔子等于n-1月加上n-2月的兔子数量# 为了计算下个月兔子数量,我们需要重新设置n-1与n-2月份的兔子数量n1 = n2n2 = n3n -= 1print("兔子的数量为:%d"% n3) return n3

(2)使用递归来完成上面的运算:

def getNumber2(n = 1):if n==1 or n==2:return 1else:return getNumber2(n-1) + getNumber2(n-2)

3.无极分类

分类为父子级分类。并且子级分类是没有极限的。以数据格式来显示分类。这样的分类称为无极分类

categorys = [{"id":2, "name":"国际新闻", "p_id":0},{"id":1, "name":"国内新闻", "p_id":0},{"id":3, "name":"娱乐新闻", "p_id":0},{"id":4, "name":"体育新闻", "p_id":0},{"id":5, "name":"广东新闻", "p_id":1},{"id":6, "name":"广西新闻", "p_id":1},{"id":7, "name":"北海新闻", "p_id":6},{"id":8, "name":"南宁新闻", "p_id":6},{"id":9, "name":"深圳新闻", "p_id":5},{"id":10, "name":"南山新闻", "p_id":9},{"id":11, "name":"龙岗新闻", "p_id":9},{"id":12, "name":"上水径新闻", "p_id":11},{"id":13, "name":"篮球新闻", "p_id":4},{"id":14, "name":"NBA新闻", "p_id":13},{"id":15, "name":"CBA新闻", "p_id":13},
]# for itme in categorys:
#     print(itme)"""
由于无极分类数据本身的输出就是混乱的。
我们需要对该数据进行排序输出。
以以下的例子为准:
|- 国内新闻
|- |- 广东新闻
|- |- |- 深圳新闻
|- |- |- |- 南山新闻
|- |- |- |- 龙岗新闻
|- |- |- |- |- 上水径新闻
|- |- 广西新闻
|- |- |- 北海新闻
|- |- |- 南宁新闻"""# 定义通过PID获取同级所有分类的方法
def getTree( pid = 0, tree = [], level=1):level_str = '|- ' * level             # 通过for循环进行遍历for cat in categorys:if cat["p_id"] == pid:            # 判断获取的pid与cat中的p_id是否相同cat["level_str"] = level_str  # 往cat添加新字段level_str并且赋值level_strcat["level"] = level          # 往cat添加新字段level并且赋值leveltree.append(cat)              # 将cat添加到tree中tree = getTree(cat["id"], tree, level+1)    # 通过自调找当前分类的子级分类return treetree = getTree()
for cat in tree:print("%s %s"%(cat["level_str"], cat["name"]))
http://www.lryc.cn/news/377254.html

相关文章:

  • 【MySQL统计函数count详解】
  • 大数据的发展,带动电子商务产业链,促进了社会的进步【电商数据采集API接口推动电商项目的源动力】
  • Python类中变量定义详解
  • c++ extern 关键字详解
  • 计算机网络:运输层 - TCP 流量控制 拥塞控制
  • Python学习打卡:day10
  • 新书速览|Ubuntu Linux运维从零开始学
  • [Qt的学习日常]--窗口
  • Vue发送http请求
  • 学习使用js和jquery修改css路径,实现html页面主题切换功能
  • (转)请介绍一下Redis的数据淘汰策略
  • APP自动化测试-Appium常见操作之详讲
  • 写给大数据开发:谈谈数仓建模的反三范式
  • Stable diffusion 3 正式开源
  • 如何配置node.js环境
  • python tensorflow 各种神经元
  • Gone框架介绍27 - 再讲 Goner 和 依赖注入
  • 【Python/Pytorch 】-- 滑动窗口算法
  • Clickhouse集群create drop database可删除集群数据库或只删除本地数据库
  • 【docker】adoptopenjdk/openjdk8-openj9:alpine-slim了解
  • Vscode interaction window
  • 后端数据null前端统一显示成空
  • 【设计模式深度剖析】【9】【行为型】【访问者模式】| 以博物馆的导览员为例加深理解
  • Salesforce‘s 爱因斯坦机器人助手引领工业聊天机器人时代
  • Day7—zookeeper基本操作
  • 计算机组成原理---Cache的基本工作原理习题
  • springboot项目中切数据库(mysql-> pg)带来的适配问题:typeHandler
  • 从零开始的<vue2项目脚手架>搭建:vite+vue2+eslint
  • Hadoop升级失败,File system image contains an old layout version -64
  • [机器学习算法]决策树