一、数据类型

1、列表

lis = [11, 22, 33, 44, 55]
for i in range(len(lis)):
print(i) # i = 0 i = 1 i = 2
del lis[i]
print(lis) # [11,22,33,44,55] [22, 44, 55] [22, 44] 循环按照列表的索引0、1、2...循环删除,最后3 的时候元素不够报错

--->赋值

l1 = []
l2 = l1
l3 = l1
l3.append('a')
print(l1,l2,l3) #['a'] ['a'] ['a']

-->隔一个元素进行删除

lis = [11, 22, 33, 44, 55]
lis = lis[::2]
print(lis)

--->或者

lis = [11, 22, 33, 44, 55]
l1 = []
for i in lis:
if lis.index(i) % 2 == 0:
l1.append(i)
lis = l1
print(lis)

--->又或者

lis = [11,22,33,44,55]
for i in range(len(lis)-1,-1,-1):
if i % 2 == 1:
del lis[i]
print(lis)

2、字典

dic = dict.fromkeys([1,2,3],'春哥')    #列表赋值
print(dic)
dic = dict.fromkeys([1,2,3],[])
print(dic) # {1: [], 2: [], 3: []}
dic[1].append('袁姐')
print(dic) #{1: ['袁姐'], 2: ['袁姐'], 3: ['袁姐']}
dic[2].extend('二哥')
print(dic) #{1: ['二', '哥'], 2: ['二', '哥'], 3: ['二', '哥']}

3、删除字典内指定键值组

--->第1种

dic = {'k1':'v1','k2':'v2','a3':'v3'}
dic1 = {}
for i in dic:
if 'k' not in i:
dic1.setdefault(i,dic[i])
dic = dic1
print(dic)

--->第2种

dic = {'k1':'v1','k2':'v2','a3':'v3'}
l = []
for i in dic:
if 'k' in i:
l.append(i)
for i in l:
del dic[i]
print(dic)

4、元组  (如果元祖里面只有一个元素且不加,那此元素是什么类型,就是什么类型)

tu1 = (1)
tu2 = (1,)
print(tu1,type(tu1)) # 1 <class 'int'>
print(tu2,type(tu2)) # (1,) <class 'tuple'> tu1 = ([1])
tu2 = ([1],)
print(tu1,type(tu1)) # [1] <class 'list'>
print(tu2,type(tu2)) # ([1],) <class 'tuple'> dic = dict.fromkeys([1,2,3,],3)
dic[1] = 4
print(dic) # {1: 4, 2: 3, 3: 3}

二、集合  (可变的数据类型,他里边的元素必须是不可变的数据类型,无序,不重复)

set1 = {1,2,3}
print(set1)
set2 = {1,2,3,[1,2,3],{'name':'alex'}} #错误表达方式,含有列表跟字典等可变数据类型
print(set2)

1、集合的增

set1 = {'peter','alex','jimmy','xiaoming'}
set1.add('老王') #第一种,直接增加元素
set1.update('abc') #第二种,拆分为最小元素增加
print(set1)

2、集合的删

set1 = {'peter','alex','jimmy','xiaoming'}
set1.pop() # 随机产出集合中某个元素,有返回值
print(set1.pop()) # 查看返回值
set1.remove('peter') #按照元素进行删除
set1.clear() # 清空集合 set()
del(set1) #删除整个集合
print(set1)

3、集合的查

set1 = {'peter','alex','jimmy','xiaoming'}
for i in set1: #顺序是变化的
print(i)

4、集合的交集

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2) #求set1 与 set2 的交集 {4, 5}
print(set1.intersection(set2)) #求set1 与 set2 的交集 {4, 5}
set3 = set2 & set1 #赋值set3
print(set3)

5、集合的并集

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

6、集合的反交集

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2) #求set1 与 set2 的反交集 {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2)) #求set1 与 set2 的反交集 {1, 2, 3, 6, 7, 8}

7、集合的差集

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

8、集合的子集与超集

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

9、面试题---去掉列表重复的元素li = [1,22,22,33,45,66,66,90]

li = [1,22,22,33,45,66,66,90]
set1 = set(li)
li = list(set1)
print(li)

10、冻结功能

s = frozenset('peter')
print(s,type(s)) # 冻结 frozenset({'e', 'r', 'p', 't'}) <class 'frozenset'>
for i in s:
print(i)

三、深浅copy

1、赋值运算

l1 = [1,2,3]
l2 = l1
l1.append('a')
print(l1,l2)
print(l1 is l2) # [1, 2, 3, 'a'] [1, 2, 3, 'a'] l1 跟l2 是同一个地址的列表

2、copy

l1 = [1,2,3]
l2 = l1.copy()
print(l1,l2) # [1, 2, 3] [1, 2, 3]
print(l1,id(l1)) # [1, 2, 3] 18895432
print(l2,id(l2)) # [1, 2, 3] 18800456
print(l1 is l2) # False l1 跟l2 不是同一个地址的列表
l2.append('a')
print(l1,l2) # [1, 2, 3] [1, 2, 3, 'a']

3、浅度copy

l1 = [1,2,[4,5,6],3]
l2 = l1.copy()
print(l1,id(l1)) # [1, 2, [4, 5, 6], 3] 18960648
print(l2,id(l2)) # [1, 2, [4, 5, 6], 3] 18960584
print(l1 is l2) # False l1 跟l2 不是同一个地址的列表
l1.append('a')
print(l1,l2) #[1, 2, [4, 5, 6], 3, 'a'] [1, 2, [4, 5, 6], 3]
l1[2].append('a')
print(l1,l2) # [1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6, 'a'], 3]
print(id(l1[2])) #
print(id(l2[2])) # 18865736 l1、l2 列表中的子列表存放地址是相同的
print(l1[2] is l2[2]) # True 浅copy 时,列表中的子列表是相同地址的

4、深度copy

import copy
l1 = [1,2,[4,5,6],3]
l2 = copy.deepcopy(l1)
print(l1,id(l1)) # [1, 2, [4, 5, 6], 3] 19324552
print(l2,id(l2)) # [1, 2, [4, 5, 6], 3] 19419208
l1[2].append('a')
print(l1,l2) # [1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6], 3] 深copy 时,列表中的子列表是不同地址的

5、小知识点

li = ['alex','taibai','wusir','egon']
for i in li:
print(li.index(i),i) # 索引从0 开始 for index,i in enumerate(li,1): # 索引加1 作为序号
print(index,i)

07、python的基础-->数据类型、集合、深浅copy的更多相关文章

  1. day7 基础数据类型&集合&深浅拷贝

    基础数据类型汇总: #!/usr/bin/env python # -*- coding:utf-8 -*- ''' str int ''' # str s = ' a' print(s.isspac ...

  2. python基础数据类型--集合(set)

    python基础数据类型--集合(set) 集合是一个数学概念由一个或多个确定的元素所构成的整体叫做集合 集合中的三个特征 1.确定性(元素必须死可hash) 2.互异性(去重) 3.无序性(集合中的 ...

  3. python的基础数据类型笔记

    注意:此文章基于python3.0以上做的笔记. python的基础数据类型大体有一下几种 一.int int类型有以下几种方法 .bit_length 返回数据在内存中所占的比特位 如下: prin ...

  4. Python基础学习Day7 基础数据类型的扩展 集合 深浅copy

    一.基础数据类型的扩展 1.1GBK ---> UTF - 8 # str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk' ...

  5. 《Python》 基础数据类型补充和深浅copy

    一.基础数据类型的补充 元组: 如果元组中只有一个数据,且没有逗号,则该‘元组’数据类型与里面的数据类型一致 列表: 列表之间可加不可减,可跟数字相乘 l1=['wang','rui'] l2=['c ...

  6. python之路(集合,深浅copy,基础数据补充)

    一.集合:类似列表,元组的存储数据容器,不同点是不可修改,不可重复.无序排列. 1.创建集合: (1).set1 = {'abby', 'eric'} result:{'eric', 'abby'} ...

  7. python基础(三)编码,深浅copy

    编码,深浅copy encode,decode在python2中使用的一些迷糊,python3中更容易理解 要理解encode和decode,首先我们要明白编码,字符和二进制的相关概念,简单来说,计算 ...

  8. Python 集合 深浅copy

    一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...

  9. python集合深浅copy

    一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...

随机推荐

  1. ==和equal的区别

    1.“==”运算符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符. 如果一个变量指向的数据是对 ...

  2. 计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd和YYYY-mm-dd HH:mm:ss

    /** * 计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd比较 * @param higDate 减数 * @param lowDate 被减数 * @returns 差值天数 ...

  3. poj3216 Prime Path(BFS)

    题目传送门  Prime Path The ministers of the cabinet were quite upset by the message from the Chief of Sec ...

  4. Java Web servlet中的cookie

    点击submit后: 点击查看Cookies: 在C:\Documents and Settings\Administrator\Cookies目录下面会有一个     hongten@webproj ...

  5. onLaunch与onLoad同步获取用户数据

    前言 在开发项目的时候遇到从全局获取用户信息,逻辑是从app.js中的onLauch获取,page页面的onLoad拿到数据填充到页面.遇到的问题是onLauch与onLoad是异步的,没办法从页面判 ...

  6. How can I check the last time stats was run on Oracle without using OEM

    All of the following data dictionary tables have a LAST_ANALYZED column (replace * with USER/ALL/DBA ...

  7. log4j.xml配置详解(转)

    转自:http://willow-na.iteye.com/blog/347340 Xml代码 <?xml version="1.0" encoding="UTF- ...

  8. WinForm解决UI假死

    运行WinForm程序时,如果后台执行比较费时的操作,前天UI就会假死卡住,很影响使用感受,这里我们简单的解决一下这个问题 using System; using System.Collections ...

  9. jq 常识复记01-- 数组操作

    删除数组指定的某个元素 js删除数组中某一项或几项的几种方法 https://www.jb51.net/article/154737.htm 首先可以给JS的数组对象定义一个函数,用于查找指定的元素在 ...

  10. Node.js的适用场景?

    1).实时应用:如在线聊天,实时通知推送等等(如socket.io) 2).分布式应用:通过高效的并行I/O使用已有的数据 3).工具类应用:海量的工具,小到前端压缩部署(如grunt),大到桌面图形 ...