python程序设计第5课第三章选择与循环

八,集合

(讲的很快,光哥志不在此)

集合是无序可变序列,用大括号界定。每个元素都是唯一的,定义时哪怕出现重复
元素也会被忽略

1.集合的创建

法一:直接将集合赋值给变量

例:>>>s={'spam','eggs','ham'}
    >>>s
    set(['eggs','ham','spam'])

法二:使用set()函数将元组,列表等可迭代对象转化为集合,同时过滤重复元素

例:>>>s=set((1,))
    >>>s
    set([1])
    >>>s=set([1,2,3,1,2,3])
    >>>s
    set([1,2,3])

*空集合的构造要用set函数而不是用{},后者返回类型会是dict

例:
>>>s=set()
>>>type(s)
<type 'set'>
>>>s={}
>>>type(s)
<type 'dict'>
2.集合的删除

用del命令删除整个集合
用.pop() .remove() .clear()方法删除单个元素

*set类型的.pop()是没有参数的,pop哪一个是不定,.remove()则是可以指定弹出的

例:
>>>s.pop('spam')   会报错
>>>s.pop()
'eggs'
>>>s
set(['ham','spam'])
>>>s.remove('ham')
>>>s
set(['spam'])
3.集合操作

交集 a|b a.union(b)
交集 a&b a.intersection(b)),
差集 a-b a.difference(b))

4.集合推导式
例:
>>>s={x.strip() for x in ('he','she','I')}
>>>s
set(['I','she','he'])
*collection模块

(简单介绍了下OrderDict()和Counter(),具体让我们自己去看官方文档和PPT)
collection模块是对python内置复合数据结构的补充,使用时要自己import

如果我们想要一个有序字典该怎么办? 用OrderedDict()

如果我们想要一个计数器(比如key是某些名词字符串,后面的value是它出现的次数,每出
现一次自动加个1),这个时候我们不需要自己写,可以用Counter()

第三章 选择与循环

(这一章直接水掉了,没讲多少东西。主要还是自己看PPT,以下只列出他稍微强调了几下的点)

*关系运算符可以连用(如 75<=i<=85)

例子:
>>>1<2>3
False
>>>1<3>2
True
>>>1<2<3
True

“==” 和"is"的区别
“ =="测试值是否相等,"is"测试对象是否是同一对象(即是否在同一内存地址中)

*番外:类对象的相等判断(类和重载都没讲,课件例子里的细节等学完了再看)
python有缓存复用机制,但是稍微复杂点就不再复用。用户自己定义的类则没有那么简单。比如下面这个例子

例子:
>>>class Spam(object):
                 pass
>>>a=Spam()
>>>b=Spam()
>>>a is b,a==b
(False,False)

为了让python能让自己所想的那样来判断a==b是否成立,需要自己告诉python什么时候相等什么时候不相等。要做到这点需要重载方法(或者说内置函数),例子里就重载了两种方法(def _ eq _ (self,other),def _ ne(self,other)),实际上这两个方法的结构已经由python帮你定义好了。课件最后提供了python帮你提前定义好的一些方法框架,内部具体的逻辑需要你自己去填充

在Python中,整数0代表假(False),整数1代表真(True)。Python也把任意的空数据结构视为假,把任意非空的数据结构视为真。 在选择和循环结构中,条件表达式的值只要不是False,0(或0.0,0j等),None,空列表,空元组,空集合,空字典,空字符串,空range对象或其他空迭代对象,Python解释器均认为与True等价。 因此几乎所有的Python合法表达式都可以作为条件表达式,包括含有函数调用的表达式。

*and与or逻辑运算符

*打选择结构的时候不要忘了冒号,还有elif关键字与C语言不同。python没有switch语句全部通
过elif来实现

*双分支结构的特殊写法

*python中,while和for循环都可以带else块

例子:
while test1:
       statement1
          if test2: break 
          if test3: continue
        statement2
else:
        statement3 
如果循环因为条件表达式不成立而自然结束(不是因为执行了break语句而结束),则执行else结构中的语句。如果循环是因为执行了break语句而导致循环提前结束,则不执行else中语句

*pass语句什么事也不做,只是起占位作用

番外:再谈"引用"和"拷贝"

"拷贝"是为了复制对象,从而避免对象共享可能造成的问题

拷贝的方式有:
1.列表的分片操作

例子:
>>>a=[1,2,3]
>>>b=a[:]
>>>a==b,a is b
(True,False)

2.字典,集合的.copy()方法

例子:
>>>a={'a':'aaa'}
>>>b=a.copy()
>>>a={'a'}
>>>b=a.copy()
>>>a==b,a is b
(True,False)

3.某些内置函数(如 list())能生成拷贝

例子:
>>>a=[1,2,3]
>>>b=list(a)
>>>a==b,a is b
(True,False)

*列表的[:]操作及字典的copy()方法只能做顶层复制

4.引入copy标准库模块并使用其中的copy,copy()(shallow copy)和copy.deepcopy(x)方法

*关于deep copy和shallow copy的区别,之前已经提到过多次。这里自己看课件和之前的笔记即可

编辑于2020-3-12 16:13
修改于2020-4-28 21:07

猜你喜欢

转载自blog.csdn.net/zimuzi2019/article/details/105882290