数据类型的补充:

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

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 set的更多相关文章

  1. Python从入门到精通之Seventh!

    函数浅析:可以减少代码重用,保持一致性,可扩展性,易维护性. 定义方法:def 函数名(形参):     '''功能注释'''      代码块 打印函数名时,会出现函数的内存地址.两个函数名相同时, ...

  2. 结合使用 Oracle Database 11g 和 Python

    结合使用 Oracle Database 11g 和 Python 本教程介绍如何结合使用 Python 和 Oracle Database 11g. 所需时间 大约 1 个小时 概述 Python ...

  3. Python迭代和解析(5):搞懂生成器和yield机制

    解析.迭代和生成系列文章:https://www.cnblogs.com/f-ck-need-u/p/9832640.html 何为生成器 生成器的wiki页:https://en.wikipedia ...

  4. python 全栈开发,Day30(第一次面向对象考试)

    月考题: python 全栈11期月考题 一 基础知识:(70分) 1.文件操作有哪些模式?请简述各模式的作用(2分) 2.详细说明tuple.list.dict的用法,以及它们的特点(3分) 3.解 ...

  5. 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)

    source: https://swtch.com/~rsc/regexp/regexp1.html translated by trav, travmymail@gmail.com 引言 下图是两种 ...

  6. Python Base Four

    35. In python, file operation syntax is similar to c. open(file,'r',……) //the first parameters is ne ...

  7. Python考试_第三次

    - python 全栈11期月考题 一 基础知识:(70分) 1.文件操作有哪些模式?请简述各模式的作用(2分) 2.详细说明tuple.list.dict的用法,以及它们的特点(3分) 3.解释生成 ...

  8. python中关于传递参数模块argprase的一些小坑

    今天在写代码的时候遇到了一个关于parser的一些小坑,记录在此备用. 我们知道在python中可以用argprase来传递一些参数给代码执行,来看下面的例子,假设现在有一个test文件夹,下面有3个 ...

  9. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

随机推荐

  1. visual stdio 2012 c#学习笔记1

    visual stdio 2012 c#学习笔记1 1 我在安装过程中选择的是英文版本,不过刚入手,所以想先从中文菜单入手,所以需要安装中文语言包: microsoft的中文语言包下载地址为:http ...

  2. 010——VUE中使用lodash库减少watch对后台请求的压力

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. C#笔记之 函数可变参数

    (转自:http://blog.csdn.net/jackluangle/article/details/6539278) 其实函数的参数的可变是因为不确定函数的参数大小的原因才使用的.看下面一个列子 ...

  4. Oracle11g数据库监听配置

    (转自:http://blog.sina.com.cn/s/blog_6908928501018057.html) 经验告诉我:最好把数据库的SID和数据库全局名称分开,免得配置时混了,如果要配置服务 ...

  5. json结构更改的方法 把date有数据的分类

    data=[ { "content": "如何走进智障儿童的内心", "title": "如何走进智障儿童的内心", & ...

  6. 交叉编译工具链介绍《Building Embedded Linux Systems》

    1.前言 配置和编译一个合适的GNU工具链是相对复杂的并且需要很精细的操作,包括你需要对不同软件库之间的依赖关系.它们的各自的任务,不同软件库版本情况都有比较好的了解,编译工具链是一个乏味的工作. 2 ...

  7. 关于linux 编程

    emacs 编辑器 gcc/g++ 编译器 gdb 调试工具 valgrind 内存泄露检查 doxygen 文档组织工具

  8. java网络编程TCP传输—流操作—服务端反馈与客户端接收

    在读取完流后,服务端会向客户端返回一些数据,告诉客户端,已经写完了. 在这里和”流操作—拿到源后的写入动作“差不多,客户端同样以byte与Buffered两种缓冲读取作为例子,同时,.也是希望大家给补 ...

  9. Hadoop2.7.1安装与配置

    Hadoop2.7.1集群环境的搭建 s204.s205是我的两台服务器hostname,可以用你对应的ip或者hostname代替 工具/原料   jdk.ssh免登录 方法/步骤   1 首先去A ...

  10. 批量插入数据利器之SqlBulkCopy

    工作中要频繁的处理一些数据导入,又不想手工去做,因此用了神器SqlBulkCopy.在MSDN查看了此类的帮助文档几经波折终于搞定,记录下来方便以后查阅. MSDN实例: using System.D ...