326 集合 ,数据类型的补充 ,copy , 编码之间的转换
一、数据类型补充
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 , 编码之间的转换的更多相关文章
- day 06 列表去重, 数据类型的补充,编码,深浅copy
因为重要,所以放前面 列表去重 l1 = [1, 2, 3, 4, 5] l2 = [3, 4, 5, 6, 7] set = list(set(l1 + l2)) # set自动去重,然后变成lis ...
- 基本数据类型、包装类、String之间的转换
package 包装类; /** *8种基本数据类型对应一个类,此类即为包装类 * 基本数据类型.包装类.String之间的转换 * 1.基本数据类型转成包装类(装箱): * ->通过构造器 : ...
- 字符编码之间的转换 utf-8 , gbk等,(解决中文字符串乱码)
目录 1.背景. 2.编码的理解 3.编码之间的相互转化 4. str类型说明 5. 可以使用的编码类型 6.参考文章 1.背景 Python中与其他程序进行交互时,如果存在字符串交互,特别是字符串中 ...
- python 全栈开发,Day7(元组转换,列表以及字典的坑,集合,关系测试,深浅copy,编码补充)
一.元组转换 数字 tu = (1) tu1 = (1,) print(tu,type(tu)) print(tu1,type(tu1)) 执行输出: 1 <class 'int'>(1, ...
- c#汉字与编码之间的转换(输出十六进制)
/******************************************************************/ /*********************** ****** ...
- java编写之jpg图片与base64编码之间的转换
/** * @author zyq * 将网络图片进行Base64位编码 * @param imgUrl * */ public static String encodeWebImageToBase6 ...
- Java基本数据类型与包装类、字符串之间的转换
基本数据类型和包装类的转换:1.装箱:基本数据类型→对应包装类,可分为手动装箱和自动装箱.2.拆箱:包装类→对应基本数据类型,可分为手动拆箱和自动拆箱. 例子:手动装箱:Integer iObj=ne ...
- utf8、ansii、unicode编码之间的转换
#include "stdafx.h"#include "windows.h"#include <iostream>#include <str ...
- (2)字符编码关系和转换(bytes类型)
ASCII 占一个字节,只支持英文 GB2312 占2个字节,只支持6700+汉字 GBK 是GB2312的升级版,支持21000+汉字 Shift-JIS 日本字符编码 ks_c-5601-1987 ...
随机推荐
- ajax个人学习笔记
1. function createXHR(){ if(typeof XMLHttpRequest != 'undefined'){ return new XMLHttpRequest(); }els ...
- webserver【实时查询当天的天气情况】
1.webserver是什么? 日常生活中经常会使用到webserver,注册时,会收到验证码,购买东西时,会收到短信,假如,A公司网站和B公司合作,那么A公司注册对的用户可以直接推送给B网站,那怎么 ...
- Atitit.5gl 第五代语言编程语言 PROLOG教程 人工智能语言的标准 与实现
Atitit.5gl 第五代语言编程语言 PROLOG教程 人工智能语言的标准 与实现 1. 第五代语言就是自然语言又被称为知识库语言或人工智能语言,1 2. 人工智能语言特点2 2.1. 试探法2 ...
- 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 ...
- C++中没有定义类的引用。
在有时候由于类太大.须要在类在后面定义: 比如: class Y{ void f(X); }; class X{ //一些成员数据和函数 }; //error 由于c++要求不论什么一个变量在引用之前 ...
- 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 ...
- 05 linux下编译Memcached
一: linux下编译Memcached(1)先在linux上安装gcc,cmake,autoconf,libtool工具,以后会使用到. 安装命令为:yum install gcc make aut ...
- 为什么 java wait/notify 必须与 synchronized 一起使用,jvm究竟做了些什么
这个课题提出来的是原先的线程并发解决的思路.目前解决线程并发,可以是lock接口结合condition 并发问题一直以来就是线程必不可少的话题. java 是第一个内置对多线程支持的主流编程语言.在 ...
- Dispose模式释放非托管资源
实现方式用的是设计模式里的模板模式,基类先搭好框架,子类重写void Dispose(bool disposing) 即可. 需要注意的是基类的Finalize函数也就是析构函数调用的是虚函数void ...
- xmlUtil 解析 创建
http://yangzi09150915.blog.163.com/blog/static/32953487201072911410398/ package com.aibi.cmdc.webSer ...