Python 基础第七天

 

今日主要内容:

1.数据类型补充

2.集合set和用法

3.深浅copy

4.编码的补充

 

1.数据类型的补充

tuple(元组)

1)元组内如果只有一个元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么类型.

例:

tu = (1)
tu1 = (1,)
print(tu,type(tu))
print(tu1,type(tu1))

tu = ('老男孩')
tu1 = ('老男孩',)
print(tu,type(tu))
print(tu1,type(tu1))

tu = ([1,2,3])

tu1 = ([1,2,3],)

print(tu,type(tu))
print(tu1,type(tu1))

2)list(列表)

在循环一个列表时,最好不要进行删除的动作(一旦删除,索引会随之改变),容易出错。

例:

li = [11,22,33,44,55]  将索引为奇数的元素删除。

法一:

del li[1::2]
print(li)

法二:

for i in range(len(li)-1,-1,-1): #倒叙删除,使用步长(起始点,终点,步长)
   if i % 2 == 1:
   del li[i]
 print(li)

解释:由于for从后向前遍历,当删除操作进行的时候,删除的是从后开始的奇数,所以不影响正序的索引.

法三:

 l1 = []
 for i in li:
   if li.index(i) % 2 == 0:
   l1.append(i)
 li = l1
 print(li)

 

dict(字典)

1)新方法:fromkeys:创建新字典,前面列的是key,后面是values

例:

例2:如果values是空列表,则出现如下现象:

为了节省内存空间,所创建的空列表公用一个内存地址.

 

例题:

dic = {'k1':'value1','k2':'value2','name':'wusir'}
将字典中含有k元素的键,对应的键值对删除。

 

for i in dic:

 if 'k' in i:
 del dic[i]

报错:IndentationError: expected an indented block

结论:

在循环字典中,不能增加或者删除此字典的键值对。如果需要删除此键值对需要跳出此字典的循环,方法如下:

l1 = []
 for i in dic:
   if 'k' in i:
   l1.append(i)
 for i in l1:
   del dic[i]
 print(dic)

解析:先循环找到要删除的K值,然后把这些值放到空列表中,在循环该列表,用删除key的方法,删除键值对.

数据转换

list --> tuple

l1 = [1,2,3]
tu1 = tuple(l1)
print(tu1)

tuple ---> list

tu = (1,2,3)
li = list(tu)
print(li)

元组转换字符串

tuple ---> str

tu = ('wusir','老男孩')
s = " ".join(tu)
print(s)

2.集合(set)和用法

什么是集合:是一些不重复,无序的可哈希的数据构成,本是是不可哈希的,不能作为字典的key使用.

作用:

1.进行元素去重

2.数据关系的测试(计算交集/并集/差集)

 

1)去重

例1.给列表出重

例2.本是有重复元素,输出时全部去重

 

集合的增加:

1.无序增加(add)

例3:对比是否无序增加

2.迭代增加 (update)

例4:展示迭代增加的现象

集合的删除

1.根据集合内元素名称删除(remove)

例5:

2.随机删除,能有返回值(pop)

 例6:对比查看是否为随机

 

3.清空集合(set)

例7:

4.删除集合(del)

例8:

查看元素

1.只能使用for循环,遍历集合

例9:

4.显示交集(&/intersection) (表示有多少相同元素)
例10:

字符串同样适用:

se = {'alex'}  
se1 = {'jason'}
print(se & se1) #此种形式不适用
例11:

5.显示反交集(^ /symmetric_difference)(表示有多少不同元素)

例12:

 

6.显示并集(|/unico)(合并两个集合,显示合并后的集合,重复的去重.)

例13:

7.显示差集(-)(两个集合的差,第一个集合减去第二个集合重复的元素,第一个集合剩下的元素)

例14:

8.子集和超集(issubset)

例15:

8.将集合set转化成不可变的集合frozenset

转化之后集合元素固定,只能通过for查看,并且可以作为字典的key,也可以作为其他集合的元素

例:16

 

 深浅copy

1.元素赋值,浅copy,深copy的关系

赋值:对于赋值运算,指向的是同一个内存地址。字典,列表,集合都一样。(a = b)

浅copy:最外层列表内存地址已经发生变化,单独开辟了内存空间,内存的嵌套的列表还是公用一个.(同样适用于字典,集合,元组不可用)

即,对于第二层或者更深层来说是不变的.(li.copy())

深copy:对于深copy来说操作后这是两个完全独立,改变任意一层都不会对另外一个产生影响.(

import copy

copy.deepcopy)

判断是赋值还是浅copy的方法:

li = [1,'2','abd',['e',123,'34a']]

l1 = li[:]

l1.append(666 )

print(l1)

问l1是否增加元素

确定方法:

1.只要l1 = li(有任何对原数据进行操作的过程都是相当于重新新建了一个列表,比如切片,步长都是如此)

2.如果是赋值的话,应该是两边都是定义的一个变量名称.不涉及到对原数据进行操作.

========================================================================================

2.浅copy的操作

例:三种类型的浅copy实验:

例2:深copy实验,进行验证

 

编码的补充(python3最后一部分)

回顾一下,str与bytes之间的相互转化:

英文:

 汉字:

 

 如果想把str 的(gbk)编码转换成(utf-8)编码如何操作

结论:如果需要转换,需要先转换到Unicode,再分别进行转换即可.

 

 

 

 

posted @ 2018-03-26 20:51  tom2ling  阅读(137)  评论(0编辑  收藏  举报