2021-03-18

print('----------------------------------------------------------------')


del list # 如果之前定义了List变量 使用list()方法之前 必须删除 否则python无法识别指定的是函数还是变量 所以python命名应该避免用函数名用作变量名
x=list(prices.values())
print(x)
# << [2.5, 4.0, 5.0] # 拿下

# 通过values找到与之对应key的方法(语法:list(dict.keys())[list(dict.values()).index(values)])
print(list(prices.keys())[list(prices.values()).index(5.0)])
# >> 薯条 完成

# 通过元组创建字典 语法:dict.fromkeys(seq,val) seq指定键值 val指定键值对应元素(为同一个)
m={}
l=[1,2,3]
k=[4,5,6]
dict01=m.fromkeys(l,k)
print(dict01)
# >> {1: [4, 5, 6], 2: [4, 5, 6], 3: [4, 5, 6]}
# 修改一个键值对应的数值
dict01[1]=[1,2,3]
print(dict01)
# >> {1: [1, 2, 3], 2: [4, 5, 6], 3: [4, 5, 6]}
# 怎么修改成功了。。。

# Python 集合(无序,不重复的元素序列)
# 语法:集合名={value1,values2,value3...} 或 集合名=set{value} 之前表述错误 该value包含了组成集合的所有元素
# 创建空集合必须使用set(),因为{}是规定为创建空字典
friend={'ly','zc','zy','scs','ly','zy','dky','scs'}
print(friend)
# >> {'dky', 'ly', 'scs', 'zy', 'zc'} 重复元素被过滤掉
'ly'in friend
# >> 判断元素是否在指定集合中 返回值为 true or false
# 集合间的运算
a=set('qwertyuasder')
print(a)
# >> {'e', 'd', 's', 'r', 'u', 'y', 'w', 'q', 'a', 't'} 也是自动过滤重复的元素
b=set('gfsfhdjsjyxuztwnfm')

c=a-b # 差集
print(c)
# >> {'e', 'a', 'r', 'q'} 返回一个a有b没有的数据元素的集合

# c=a+b
# print(c)
# >> TypeError: unsupported operand type(s) for +: 'set' and 'set' 用set创建的集合不支持+?
# d={'a','b','c'}
# e={'d','e','f'}
# c=d+e
# print(c)
# >> TypeError: unsupported operand type(s) for +: 'set' and 'set' 看来集合不支持 ’+‘运算

c=a|b
print(c) # 并集

c=a&b # 交集

c=a^b # 不同时包含于a和b的元素 交集的补集

# 集合同样支持集合推导式

# 集合的基本操作

# 添加元素
# 1
a={1,2,3}
a.add('wdnmd')
print(a)
# >> {1, 2, 3, 'wdnmd'} 添加成功
# 2
a.update('dqz') # 该方法的的参数可以为 列表 元组 和字典
print(a) # 添加字符串
# >> {1, 2, 3, 'z', 'q', 'd', 'wdnmd'} 类似于set()方法 添加的是单个字符 而不是整个字符串

a.update([4,5,6])
print(a) # 列表
# >> {1, 2, 3, 4, 5, 6, 'd', 'wdnmd', 'z', 'q'} # 添加的为列表中的元素,而不是整个列表整体作为集合的一个元素对象
# 强化记忆 []列表 ()元组 {}字典or集合

# 移除元素
# 1
# a.remove()
# 移除不存在的元素会发生错误
# 2
a.discard(1) # 可以删除指定元素 如果删除元素不存在 不会报错
# 3
a.pop() # 随机删除集合中的一个元素 pop 方法首先会对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除

# 计算集合元素个数
print(len(a))

# 清空集合
a.clear()
print(a)
# >> set() 清空成功

# 判断元素是否在集合中
# 语法:x in 集合名 (返回 true or false)

# Python集合内置方法

# add() 为集合添加元素

# clear()   移除集合中的所有元素

# copy()    拷贝一个集合

# difference()  返回多个集合的差集
a={1,2,3,4,5}
b={1,4,6,8,9}
c=a.difference(b)
print(c)
# print(a) 做差集后a集合不变
# >> {2, 3, 5} 返回a-b(差集)

# difference_update()   移除集合中与指定集合相同的元素
c=a.difference_update(b)
print(c)

# discard() 删除集合中指定的元素
a.discard(5)

# intersection()    返回集合的交集
c=a.intersection(b)
print(c)
# >> {1,4} 返回a 与b的交集

# intersection_update() 返回集合的交集。
c=a.intersection(b)
print(c) # a与b的交集

# isdisjoint()  判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
c=a.isdisjoint(b)

# issubset()    判断指定集合是否为该方法参数集合的子集。

# issuperset()  判断该方法的参数集合是否为指定集合的子集

# pop() 随机移除元素

# remove()  移除指定元素

# symmetric_difference()    返回两个集合中不重复的元素集合。

# symmetric_difference_update() 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。

# union()   返回两个集合的并集
a.union(b)

# update()  给集合添加元素
a.update('wdnmd') # 添加元素不能为整型 否则报错
print(a)
# >> {2, 3, 'm', 'd', 'w', 'n'}
a.clear()
a.update({'wdnmd'})
print(a)
# >> {'wdnmd'}
# a.update('字符串') 将字符串拆分为单个字符 一一添加到集合中去 重复的字符只会出现一次
# a.update({字符串}) 是将其作为一个集合添加到该集合中去
# 注意两者的区分
# 同样 若待添加的元素为元组时也要注意
a.update(('dqz'))
print(a) # 同样拆分为单个字符逐一添加
# >> {'z', 'q', 'd', 'wdnmd'}
# 若想要整个元组整体添加
a.clear()
a.update(('wdnmd',))
print(a)
# >> {'wdnmd'} 整体添加成功的关键是元组里面的逗号

# 集合注意事项
# set()创建集合与update()函数的规则基本一致
a.clear()
a=set('wdnmd')
print(a)
# >> {'d', 'm', 'n', 'w'} 拆分为多个元素 排除重复元素
a=set(('wdnmddqz'))
print(a)
# >> {'q', 'd', 'w', 'z', 'n', 'm'} 同样摆脱不了被拆分的命运
a.clear()
a=set({'wdnmd'})
print(a)
# >> {'wdnmd'} 集合可以避免被拆分
a=set(('wdnmd','dqz'))
print(a)
# >> {'dqz', 'wdnmd'} # 元组有多个元素时也可以避免被拆分

# 使用set 方法创建集合时 列表和元组类型的作为参数 会被拆分去掉重复的元素
a.clear()
list1=[1,2,3,4,5]
a=set(list1)
print(a)
# >> {1, 2, 3, 4, 5}
tuple1=(2,3,4,5,6,2)
a=set(tuple1)
print(a)
# >> {2, 3, 4, 5, 6}
# 集合对list和tuple 具有升序排序的作用

# pop()对于字典和字符转换的集合来说是随机删除的 但对于由列表和元组通过set方法创建的集合来讲 总是删除最左侧的
# 一个元素,也就是最小的元素,且总是最小的元素。

# 总结
# 添加元素
# setx.add(string|tuple|bool|number):void # 添加
# setx.update(y [,z...]):void # y、z 为 list|tuple|dict # 更新添加
# setx.clear():void # 清空
# setx.copy():set # 深拷贝(指向新的内存地址) 复制
print(a);print(id(a))
# >> {2, 3, 4, 5, 6} id1541843919360
b=set()
b=a.copy()
print(b);print(id(b))
# >> {2, 3, 4, 5, 6} id1955571705888 id发生变化指向新的内存

# 删除元素
# setx.remove(y):void|KeyError #如删除不存在的元素,有报错
# setx.discard(y):void # 删除指定元素
# setx.pop():mixed # 随机删除集合元素,并返回被删除的元素
# a.remove('a')
# >>  KeyError: 'a' 删除不存在的元素出现报错
a.discard(1)
# 删除不存在的元素不会报错
print(a.pop())
# 2 >> 总是删除最左侧第一个元素 但由于集合具有升序排序的作用 所以每次总是删除最小的元素
print(a)

# 右全包含布尔真:判断 setx 集合的所有元素是否都包含在 sety 集合中
# setx.issubset(sety):bool
# >>> x = {"a", "b", "c"}
# >>> y = {"f", "e", "d", "c", "b", "a"}
# >>> x.issubset(y)
# True
# setx ->sety 所谓右全包是指判断子集的方向
b={3,4,5,6,7}
print(a.issubset(b))
# >> True

# 左全包含布尔真: 判断 sety 集合的所有元素是否都包含在原始 setx 的集合中
# setx.issuperset(sety):bool
# >>> x = {"a", "b", "c"}
# >>> y = {"f", "e", "d", "c", "b", "a"}
# >>> y.issuperset(x)
# True
# setx <- sety  箭头指判断子集的方向为左
a={1,2,3,4}
b={1,2}
print(a.issuperset(b))
# >> true

# 右半包含布尔取反:判断集合 sety 中是否有集合 setx 的任一元素(包含返回 False,不包含返回 True)
# setx.isdisjoint(sety):bool

# 合并集合(并集):(注意:集合元素的去重、唯一性)
# setx.union(sety [, setz...]):set
# >>> x = {"a", "b", "c"}cao.liu
# >>> y = {"f", "d", "a"}
# >>> z = {"c", "d", "e"}
# >>> x.union(y, z)
# {'c', 'd', 'f', 'e', 'b', 'a'}

# 左包含差集: 返回集合的差集,即返回的集合元素包含在第一个集合 x 中,但不包含在第二个集合 y(方法的参数)中
# setx.difference(sety):set

# 左引用删除交集(无返回值,即直接修改原内存指向)
# setx.difference_update(sety):void
# >>> x,y
# ({'banana', 'cshit', 'vipkwd.com', 'alipay'}, {'google', 'runoob', 'facebook', 'alipay'})>>> type(x.difference_update(y))
# <class 'NoneType'>
# >>> x,y
# ({'banana', 'cshit', 'vipkwd.com'}, {'google', 'runoob', 'facebook', 'alipay'})

# 左右差集:返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素
# setx.symmetric_difference(sety):set

# 左引用删除交集且引用追加右差集(引用操作,无返回值)
# setx.symmetric_difference_update(sett):void

# 左右交集:返回两个或更多集合中都包含的元素,即交集
# setx.intersection(sety[, seyz....]):set

# 左引用交集
# setx.intersection_update(sety):void

# 辅助理解:所有提到 “引用” 俩字的都是函数内部直接操作内存指向,故无返回值;
# 反之:如果一个函数没有实质返回值,那么它一定是在函数内部改变了其他位置内容,
# 否则这个函数就是 dog shit,因为它不具有实质的意义。

# Python 编程第一步
# 斐波那契函数(两元素的总和确定下一个函数)
a,b=0,1
while b<10:
    print(b)
    a,b=b,a+b # 相当于引入了两个中间变量 (n=b,m=a+b,a=n,b=m) 先计算等式右边 后赋值给等式右边的变量(迭代)
# >>
# 1
# 1
# 2
# 3
# 5
# 8
# 右边的表达式会在赋值变动之前执行,右边表达式的执行顺序是从左往右的
# 等号两边的表达式中 右边的表达式会先执行 而表达式执行的顺序是从左到右

a,b=0,1
while b<1000:
    print(b,end=',')
    a,b=b,a+b
# >> 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

# 递归方法
def fab(n):
    if n<1:
        print('输入有误')
        return -1
    if n==1 or n==2:
        return 1
    else:
        return fab(n-1)+fab(n-2)

print(fab(12))
# >> 144

# 利用字典实现
n=int(input("请输入一个整数:"))
def fab(n):
     if n<1:
         print('输入有误')
         return  -1;
     if n==1 or n==2:
         return  1
     else:
         return fab(n-1)+fab(n-2)
result=[]
for i in  range(1,n+1):
    result.append(fab(i))
print(result)  # 列表返回

n=int(input('请输入一个整数:'))
dic={0:0,1:1}
def fib(n):
    if n in dic:
        return dic[n]
    else:
        temp=fib(n-1)+fib(n-2)
        dic[n]=temp
        return temp
for i in range(n):
    print(fib(i+1),end='')
# <<20 >> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
# <<20 >> 11235813213455891442333776109871597258441816765 存储成功

# r.py
import sys, getopt
# 递归算法 填充斐波拉契数列
x, y = 0, 1
f_len, f_max = [], []
f_len.append(x);
f_len.append(y)
f_max.append(x);
f_max.append(y)

# 按最大个数填充
def Fsqe_Len(n):
    if len(f_len) < n:
        Fsqe_Len(n - 1)
    m = f_len[n - 1] + f_len[n - 2]
    f_len.append(m)

# 按最大值填充
def Fsqe_Max(fmx):
    fmlen = len(f_max) - 1
    if f_max[fmlen] > fmx:
        del f_max[fmlen]
    else:
        m = f_max[fmlen - 1] + f_max[fmlen]
        f_max.append(m)
        Fsqe_Max(fmx)

lens = int(input('Fsqe_Len 输入最大个数:'))
maxs = int(input('Fsqe_Max 输入最大值:'))
if __name__ == '__main__':
    Fsqe_Len(lens)
    Fsqe_Max(maxs)
    print(f_len)
    print(f_max)


print('----------------------------------------------------------------')
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 用实验和观察来检验想法,依据通过检验的想法来建造理论,驳回未通过检验的想法,依据证据,无论会带来何种结果,并且质疑...
    莫忘小寒阅读 148评论 0 0
  • 做什么事情最累,就是每天忙忙碌碌,到头来要返工的工作。 做什么事情最累,就是每天被安排一些自己不赞同的观点。 做什...
    爱简生活阅读 147评论 0 0
  • 儿子: 这几天作业做得特别快,说明你学得不错,也有了一点自主学习的劲头,点个赞! 爸爸再跟你说一个事,我们得开始体...
    shbguo阅读 184评论 0 0
  • 夜莺2517阅读 127,695评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,863评论 1 6