python's seventh day for me

Posted Qingqiu_Gu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python's seventh day for me相关的知识,希望对你有一定的参考价值。

数据类型的补充:

    对于元祖:  如果只有一个元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型。

tu = (\'顾清秋\')
tul = (\'顾清秋\',)
print(type(tu))
print(type(tul))

# <class \'str\'>
# <class \'tuple\'>

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

li = [1,2,3,4,5]   #删除索引为奇数的元素
del li[1::2]       #切片删除
print(li)

# [1, 3, 5]



li = [1,2,3,4,5]   #删除索引为奇数的元素
for i in range (len(li)-1,-1,-1):   #反向打印索引。
    # print(i)                 
    if i % 2 ==1:        #检测索引是否为奇数
        del li[i]       #从后往前删除元素,不会影响前面的索引位置。
print(li)

# [1, 3, 5]



li = [1,2,3,4,5]   #删除索引为奇数的元素
li2 = []   #定义一个空列表,用来存放索引为偶数的元素
for i in range(len(li)):
    # print(i)
    if i % 2 == 0:
        li2.append(li[i])   #将索引为偶数的元素加入到li2中
li = li2           # 将列表li2中的索引为偶数的元素赋值给li
print(li)

# [1, 3, 5]

    对于字典: 在循环字典中,不能增加或者删除此字典的键值对。否则会报错(dictionary changed size during iteration)

#   将字典中含有k元素的键以及其对应的键值对删除。
dic = {\'k1\':\'顾清秋\',\'k2\':\'懒笨呆\',\'name\':\'alex\'}
li = []            #用来存放dic中含k元素的键。
for i in dic.keys():
    # print(i)
    if \'k\' in i:   #判断是否存在
        li.append(i)
for i in li:
    del dic[i]    #删除dic中含k键的键值对。
print(dic)


# {\'name\': \'alex\'}

fromkeys()

dic = dict.fromkeys(\'abc\',\'alex\')
print(dic)

# {\'c\': \'alex\', \'b\': \'alex\', \'a\': \'alex\'}


dic = dict.fromkeys([1,2,3],[])
print(dic)

# 1: [], 2: [], 3: []}
dic[1].append(\'顾清秋\')
print(dic)

# {1: [\'顾清秋\'], 2: [\'顾清秋\'], 3: [\'顾清秋\']}
#由上面输出可以看出1,2,3所对应的[]是同一个空列表,一个改变其他的都随之改变。

tuple 与 list  之间的相互转换。

#将元祖转换成列表
tu = (1,2,3)
li = list(tu)
print(li)

# [1, 2, 3]


#将列表转换成元祖
li2 = [1,2,3]
tu2 = tuple(li2)
print(tu2)

#(1, 2, 3)

数据类型转换成 bool 为 False

    0, 空字符串, 空列表, 空字典, 空元祖。

tulpe  ---> str  (单向)

tu = (\'顾清秋\',\'lanbendai\')
s = \'\'.join(tu)
print(s)

# 顾清秋lanbendai

集合 set

    去重:

#去除li中重复的数字。
li = [11,22,33,33,44,22,55]
li = list(set(li))    #set()去除重复的数字,再转换成列表赋值给li
print(li)

# {33, 11, 44, 22, 55}

集合的创建:

set1 = set({1,2,\'guqingqiu\'})
print(set1,type(set1))

# {\'guqingqiu\', 1, 2} <class \'set\'>

集合的 增 :

    add  update

set1 = {\'顾清秋\',\'懒笨呆\'}
set1.add(\'guqingqiu\')
print(set1)

# {\'顾清秋\', \'懒笨呆\', \'guqingqiu\'}


set1.update(\'abc\')print(set1)

# {\'懒笨呆\', \'b\', \'顾清秋\', \'a\', \'guqingqiu\', \'c\'}

集合的 删 :

    remove()  指定元素删除

set1 = {\'顾清秋\',\'懒笨呆\'}
set1.remove(\'顾清秋\')
print(set1)

# {\'懒笨呆\'}

    pop()  随机删除

set1 = {\'顾清秋\',\'懒笨呆\'}
print(set1 .pop())   #有返回值
print(set1)

# 懒笨呆
# {\'顾清秋\'}

    clear  清空集合

set1 = {\'顾清秋\',\'懒笨呆\'}
set1.clear()
print(set1)

#set()     #空集合

    del  直接删除集合。

集合的 查

    用 for 循环查看

set1 = {\'顾清秋\',\'懒笨呆\'}
for i in set1:
    print(i)

# 顾清秋
# 懒笨呆

 集合的 交集 :

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2)
print(set1.intersection(set2))

# {4, 5}
# {4, 5}

集合的  反交集 :

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2)
print(set1.symmetric_difference(set2))

# {1, 2, 3, 6, 7, 8}
# {1, 2, 3, 6, 7, 8}

 

集合的  并

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2)
print(set1.union(set2))

# {1, 2, 3, 4, 5, 6, 7, 8}
# {1, 2, 3, 4, 5, 6, 7, 8}

集合的  差集 :

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2)#哪个集合在前面打印的就是哪个集合多出来的
print(set2 - set1)

# {1, 2, 3}
# {8, 6, 7}

集合的 子集 :

set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
print(set1.issubset(set2))   #子集
print(set2.issuperset(set1))  #set2 是 set1的超集

# True
# True

集合的 冻集合 :

frozenset()   将集合转换成不可变类型    

set1 = {\'顾清秋\',\'懒笨呆\'}
set2 = frozenset(set1)
print(set2,type(set2))

# frozenset({\'顾清秋\', \'懒笨呆\'}) <class \'frozenset\'>

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

l1 = [1,2,3]
l2 = l1
l2.append(111)
print(l1,l2)

# [1, 2, 3, 111] [1, 2, 3, 111]

浅 copy() 第一层创建的是新的内存地址,但是第二层开始,指向的都是同一个内存地址,所以对于第二层以及更深的层数来说,将会保持一致性。


l1 = [1,2,[1,2,3],4] l2 = l1.copy() l1[2].append(666) print(l1[2]) print(l2[2]) print(l1,id(l1[2])) print(l2,id(l2[2]))
# [1, 2, 3, 666]
# [1, 2, 3, 666] # [1, 2, [1, 2, 3, 666], 4] 1872001973960 # [1, 2, [1, 2, 3, 666], 4] 1872001973960

deep.copy()

    对于深 copy来说,两个是完全独立的,改变任意一个任何元素(无论多少层),另一个绝对不改变。

import copy    #调用copy库
l1 = [1,2,[1,2,3],4]
l2 = copy.deepcopy(l1)
l1[2].append(666)
print(l1,l2)
print(id(l1[2]),id(l2[2]))

# [1, 2, [1, 2, 3, 666], 4] [1, 2, [1, 2, 3], 4]
# 1803667445192 1803667444808

切片赋值  一个改变另一个随之改变  第一层的id 内存位置不同,但子层id一致。类似于浅copy().

l1 = [1,2,3,[22,33]]
l2 = l1[:]
l1[3].append(666)
print(l1)
print(l2)

# [1, 2, 3, [22, 33, 666]]
# [1, 2, 3, [22, 33, 666]]

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

s = \'guqingqiu\'
s1 = s.encode(\'utf-8\')   #unicode ---> utf-8 编码
print(s1)
s3 = s1.decode(\'utf-8\')  # utf-8  ---> unicode 解码
print(s3)

# b\'guqingqiu\'
# guqingqiu

utf -8 转成 gbk

 

s = \'老男孩\'
s1 = s.encode(\'gbk\')     #unicode ---> gbk
print(s1)
s2 = s1.decode(\'gbk\').encode(\'utf-8\')  # gbk -->unicode-->utf-8
print(s2)

# b\'\\xc0\\xcf\\xc4\\xd0\\xba\\xa2\'
# b\'\\xe8\\x80\\x81\\xe7\\x94\\xb7\\xe5\\xad\\xa9\'

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于python's seventh day for me的主要内容,如果未能解决你的问题,请参考以下文章

python's eleventh day for me

Python之路,Day14 - It's time for Django

python's thirty day for me 异常处理

python's sixth day for me 员工信息表

python's twenty-sixth day for me 模块

python's twenty eithth day for me 模块和包