一、数据类型补充
1,对于元组:如果只有一个元素,并且没有逗号,此元素是什么数据类型,改表达式就是什么数据类型。
tu = ()
tu1 = (,)
print(tu,type(tu)) #1 <class 'int'>
print(tu1,type(tu1)) #(1,) <class 'tuple'>
2,对于list,在循环一个列表时,最好不要进行删除的动作(一旦删除,索引会随之改变),
容易出错。增加同理
li = [,,,,,]
将索引为奇数的元素删除。
del li[::] #最简单的切片删除法,del可以进行切片删除。
print(li)
l1 = []
for i in range(len(li)): #新建一个列表,将不被删除的元素,加入列表中。
if i % == :
l1.append(li[i])
li = l1
print(li)

l1 = []   #通过元素查找序列号,但是在由相同元素存在是会出错。
for i in li:
if li.index(i) % 2 == 0:
l1.append(i)
li = l1
print(li)
for i in range(len(li)): 在循环中删除元素,会导致后面的元素往前排,i会按照未删除前的方式循环,导致报错
print(li) # [11, 22, 33, 44, 55] [11, 22, 33, 44, 55] [11, 33, 44, 55] [11, 33, 44, 55] [11, 33, 44]
print(i) # 0 1 2 3 4
if i % 2 == 1:
del li[i]
print(li) # [11, 22, 33, 44, 55] [11, 33, 44, 55] [11, 33, 44, 55] [11, 33, 44] [11, 33, 44]
print(i) # 0 1 2 3 4
print(li) # list assignment index out of range
del li[100] # list assignment index out of range

3,dict 在循环字典中,不能增加或者删除此字典的键值对。


dic = dict.fromkeys('abc','alex')#fromkeys()函数用于创建一个新字典,以序列seq中元素做字典的键
print(dic) #{'a': 'alex', 'b': 'alex', 'c': 'alex'} value为字典所有键对应的初始值。
dic = dict.fromkeys([,,],[])
print(dic) #{1: [], 2: [], 3: []}
dic[].append('老男孩')
print(dic) # {1: ['老男孩'], 2: ['老男孩'], 3: ['老男孩']} dic = {'k1':'value1','k2':'value2','name':'wusir'}
将字典中含有k元素的键,对应的键值对删除。
for i in dic:
if 'k' in i:
del dic[i]
#RuntimeError: dictionary changed size during iteration字典在迭代过程中更改大小 count = 0
for i in dic: #此时的 i 是字典的键
dic[i+str(count)] = dic[i] #给每个键加一个字符串
count += 1
l1 = []
for i in dic:
if 'k' in i:
l1.append(i)
for i in l1:
del dic[i]
print(dic)
4、数据转换
tuple list
tu = (1,2,3)
li = list(tu)
l1 = [1,2,3]
tu1 = tuple(l1)

tuple >> str
tu = ('wusir','老男孩')
s = " ".join(tu)

二、集合

集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

  去重,把一个列表变成集合,就自动去重了。

  关系测试,测试两组数据之前的交集、差集、并集等关系。

1集合的创建,去重

li = [11,11,22,22,33,33,33,44]
li = list(set(li))
print(li) #[33, 11, 44, 22]
set = {11,22,33,11,22,33,44}
print(set) #[33, 11, 44, 22]

2 集合的增(.add()、.update())

set1 = {'alex','wusir','ritian','egon','barry'}
set1.add('女神')
print(set1) #{'egon', 'wusir', '女神', 'alex', 'barry', 'ritian'}
set1.update('abc') #将元素拆分后添加
set1.update([,,])
print(set1) #{'b', 1, 2, 3, 'c', 'egon', 'wusir', '女神', 'a', 'alex', 'barry', 'ritian'}

3,删

set1 = {'alex','wusir','ritian','egon','barry'}
set1.remove('alex')#按元素删除
print(set1) #{'wusir', 'ritian', 'barry', 'egon'} ret = set1.pop() # 随机删除 有返回值
print(ret) #ritian
print(set1) #{'alex', 'wusir', 'barry', 'egon'} set1.clear() #清空集合
print(set1) # set() del set1 #删除集合
print(set1) # NameError: name 'set1' is not defined

4查

for 循环 打印

5,集合的其他操作:

  5.1 交集。(&  或者 intersection)

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

  5.2 并集。(| 或者 union)

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

  5.3 差集。(- 或者 difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2) # {1, 2, 3}
print(set1.difference(set2)) # {1, 2, 3}

  5.4反交集。 (^ 或者 symmetric_difference)

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

  5.5子集与超集

 
set1 = {1,2,3}
set2 = {1,2,3,4,5,6} print(set1 < set2)
print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。 print(set2 > set1)
print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。
 

6,frozenset不可变集合,让集合变成不可变类型。

s = frozenset('barry')
print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>

三、深浅copy

l1 = [,,]
l2 = l1
l2.append()
print(l1,l2) # [1, 2, 3, 111][1, 2, 3, 111]
print(id(l1)) #6147008
print(id(l2)) #6147008
对于赋值运算,指向的是同一个内存地址。字典,列表,集合都一样。
copy 不是指向一个,在内存中开辟了一个内存空间
对于浅copy来说,第一层创建的是新的内存地址,
而从第二层开始,指向的都是同一个内存地址,
所以,对于第二层以及更深的层数来说,保持一致

l1 = [1,2,3]
l2 = l1.copy()
l1.append(111)
print(id(l1),id(l2)) #35441600 35442360
l1 = [1,2,[1,2,3,[22,33,44]],4]
l2 = l1.copy()
l1[2].append(666)
print(l1) #[1, 2, [1, 2, 3, [22, 33, 44], 666], 4]
print(l2) #[1, 2, [1, 2, 3, [22, 33, 44], 666], 4]
print(id(l1))
print(id(l2))
deep.copy
对于深copy来说,两个是完全独立的,
改变任意一个的任何元素(无论多少层),另一个绝对不改变.
import copy
l1 = [1, 2, [1, 2, 3], 4]
l2 = copy.deepcopy(l1)
l1[2].append(666)
print(l1,l2) #[1, 2, [1, 2, 3, 666], 4] [1, 2, [1, 2, 3], 4]
print(id(l1[2]),id(l2[2])) # 34983528 34983328
 

四、编码的补充

s = 'alex'
s1 = s.encode('utf-8') # unicode ---> utf-8 编码
s3 = s1.decode('utf-8') # utf-8 ---> unicode 解码
print(s3) s = 'alex'
s1 = s.encode('gbk') # unicode ---> gbk 编码
s3 = s1.decode('gbk') # gbk ---> unicode 解码
print(s3) gbk ---> utf-
s = 'alex'
s1 = s.encode('gbk')
print(s1) s2 = s1.decode('gbk').encode('utf-8')
print(s2) s = '老男孩'
s1 = s.encode('gbk')
print(s1) s2 = s1.decode('gbk').encode('utf-8')
print(s2)

326 集合 ,数据类型的补充 ,copy , 编码之间的转换的更多相关文章

  1. day 06 列表去重, 数据类型的补充,编码,深浅copy

    因为重要,所以放前面 列表去重 l1 = [1, 2, 3, 4, 5] l2 = [3, 4, 5, 6, 7] set = list(set(l1 + l2)) # set自动去重,然后变成lis ...

  2. 基本数据类型、包装类、String之间的转换

    package 包装类; /** *8种基本数据类型对应一个类,此类即为包装类 * 基本数据类型.包装类.String之间的转换 * 1.基本数据类型转成包装类(装箱): * ->通过构造器 : ...

  3. 字符编码之间的转换 utf-8 , gbk等,(解决中文字符串乱码)

    目录 1.背景. 2.编码的理解 3.编码之间的相互转化 4. str类型说明 5. 可以使用的编码类型 6.参考文章 1.背景 Python中与其他程序进行交互时,如果存在字符串交互,特别是字符串中 ...

  4. python 全栈开发,Day7(元组转换,列表以及字典的坑,集合,关系测试,深浅copy,编码补充)

    一.元组转换 数字 tu = (1) tu1 = (1,) print(tu,type(tu)) print(tu1,type(tu1)) 执行输出: 1 <class 'int'>(1, ...

  5. c#汉字与编码之间的转换(输出十六进制)

    /******************************************************************/ /*********************** ****** ...

  6. java编写之jpg图片与base64编码之间的转换

    /** * @author zyq * 将网络图片进行Base64位编码 * @param imgUrl * */ public static String encodeWebImageToBase6 ...

  7. Java基本数据类型与包装类、字符串之间的转换

    基本数据类型和包装类的转换:1.装箱:基本数据类型→对应包装类,可分为手动装箱和自动装箱.2.拆箱:包装类→对应基本数据类型,可分为手动拆箱和自动拆箱. 例子:手动装箱:Integer iObj=ne ...

  8. utf8、ansii、unicode编码之间的转换

    #include "stdafx.h"#include "windows.h"#include <iostream>#include <str ...

  9. (2)字符编码关系和转换(bytes类型)

    ASCII 占一个字节,只支持英文 GB2312 占2个字节,只支持6700+汉字 GBK 是GB2312的升级版,支持21000+汉字 Shift-JIS 日本字符编码 ks_c-5601-1987 ...

随机推荐

  1. ajax个人学习笔记

    1. function createXHR(){ if(typeof XMLHttpRequest != 'undefined'){ return new XMLHttpRequest(); }els ...

  2. webserver【实时查询当天的天气情况】

    1.webserver是什么? 日常生活中经常会使用到webserver,注册时,会收到验证码,购买东西时,会收到短信,假如,A公司网站和B公司合作,那么A公司注册对的用户可以直接推送给B网站,那怎么 ...

  3. Atitit.5gl 第五代语言编程语言 PROLOG教程  人工智能语言的标准 与实现

    Atitit.5gl 第五代语言编程语言 PROLOG教程  人工智能语言的标准 与实现 1. 第五代语言就是自然语言又被称为知识库语言或人工智能语言,1 2. 人工智能语言特点2 2.1. 试探法2 ...

  4. Atitit swt 4.3 4.4 4.5 新特性java attilax总结

    Atitit swt 4.3 4.4 4.5 新特性java attilax总结 1. 4.5 Release - June 3, 20151 1.1. Older Releases1 2. SWT  ...

  5. C++中没有定义类的引用。

    在有时候由于类太大.须要在类在后面定义: 比如: class Y{ void f(X); }; class X{ //一些成员数据和函数 }; //error 由于c++要求不论什么一个变量在引用之前 ...

  6. Mysql----MySQL的mysql_insert_id和LAST_INSERT_ID(转)

    本文介绍的是mysql中last_insert_id和mysql_insert_id的区别 1 mysql_insert_id 一.PHP获取MYSQL新插入数据的ID mysql_insert_id ...

  7. 05 linux下编译Memcached

    一: linux下编译Memcached(1)先在linux上安装gcc,cmake,autoconf,libtool工具,以后会使用到. 安装命令为:yum install gcc make aut ...

  8. 为什么 java wait/notify 必须与 synchronized 一起使用,jvm究竟做了些什么

    这个课题提出来的是原先的线程并发解决的思路.目前解决线程并发,可以是lock接口结合condition  并发问题一直以来就是线程必不可少的话题. java 是第一个内置对多线程支持的主流编程语言.在 ...

  9. Dispose模式释放非托管资源

    实现方式用的是设计模式里的模板模式,基类先搭好框架,子类重写void Dispose(bool disposing) 即可. 需要注意的是基类的Finalize函数也就是析构函数调用的是虚函数void ...

  10. xmlUtil 解析 创建

    http://yangzi09150915.blog.163.com/blog/static/32953487201072911410398/ package com.aibi.cmdc.webSer ...