Python学习日记(四) 集合和元祖
元祖的特性:是一个只读列表、可以循环、可以切片,修改数据遵循'儿子'不能改但'孙子'可能可以改。
iterable:可迭代对象(元祖、列表、字串、集合)
元祖宣告方式:
tu = (1,2,3,['a','b',1],'str') #(1, 2, 3, ['a', 'b', 1], 'str')
元祖索引切片:
tu = (1,2,3,['a','b',1],'str') #(1, 2, 3, ['a', 'b', 1], 'str')
print(tu[1]) #
print(tu[-2]) #['a', 'b', 1]
print(tu[1:3]) #(2, 3)
print(tu[-1:2:-1]) #('str', ['a', 'b', 1])
print(tu[::1]) #(1, 2, 3, ['a', 'b', 1], 'str')
print(tu[::-2]) #('str', 3, 1)
查:
for i in tu:
print(i)
#
#
#
#['a', 'b', 1]
#str
tu.index():
通过元素找索引,可以切片,找到该元素则返回第一个元素索引值,找不到则报错
print(tu[::-2].index(3)) #
print(tu.index(['a','b',1])) #
tu.count():
tu = (1,2,3,['a','b',1],'str',2,2)
print(tu.count(2)) #
len(tu):
tu = (1,2,3,['a','b',1],'str',2,2)
print(len(tu)) #
改:
因为元祖为只读列表里面的数据不能改动,但是其子元素内部的元素可能可以改动。
tu =((1,2,'a'),['a','b',1],'a',1,{1,2})
tu[0][2] = 'z'
print(tu) #'tuple' object does not support item assignment tu[1][2] = 'z'
print(tu) #((1, 2, 'a'), ['a', 'b', 'z'], 'a', 1, {1, 2}) tu[2] = 'z'
print(tu) #'tuple' object does not support item assignment tu[3] = 1
print(tu) #'tuple' object does not support item assignment tu[4][0]= 5
print(tu) #'set' object does not support item assignment
集合的特性:集合本身是一个可变的数据类型,但其中的元素是不可变的数据类型。它也有着无序、不重复的特点。
把一个列表转成集合就可以做到去重复的效果。
集合宣告方式:
当创建一个空集合时要用set(),不能用{ }
a = set() #set()
b = set({1,'a',False,'a'}) #{False, 1, 'a'}
c = {1,2,'a','c','c'} #{1, 2, 'c', 'a'}
增:
set.add():
将元素无序的添加至集合中,若该元素已存在则不进行任何操作
a = set({1,2,3,'a',(1,2)})
a.add(1)
print(a) #{(1, 2), 1, 2, 3, 'a'} a.add('ab')
print(a) #{(1, 2), 1, 2, 3, 'ab', 'a'}
set.update():
将元素迭代并无序加入以逗号隔开
a = set({1,2,3,'a',(1,2)})
a.update('abc') #{(1, 2), 1, 2, 3, 'b', 'c', 'a'}
a.update({'key1' : 12,'key2' : 'c','key3' : 0}) #{(1, 2), 1, 2, 3, 'key2', 'key3', 'key1', 'a'}
a.update([6,5]) #{(1, 2), 1, 2, 3, 5, 6, 'a'}
a.update((1,9,'a')) #{(1, 2), 1, 2, 3, 9, 'a'}
a.update(set({5,6})) #{(1, 2), 1, 2, 3, 5, 6, 'a'}
删:
set.pop():
随机删除集合中的一个元素,并返回结果
a = set({1,2,3,'a',(1,2)})
print(a.pop()) #(1, 2) b = set()
print(b.pop()) #'pop from an empty set'
set.remove():
在集合中删除一个元素,如果元素不存在则返回错误
a = set({1,2,3,'a',(1,2)})
a.remove(1)
print(a) #{(1, 2), 2, 3, 'a'}
a.remove(1)
print(a) #KeyError: 1
set.clear():
清空整个集合
a = set({1,2,3,'a',(1,2)})
a.clear()
print(a) #set()
del:
删除该集合
a = set({1,2,3,'a',(1,2)})
del a
print(a) #name 'a' is not defined
set.discard():
移除集合中的某个元素,若果元素不存在则不会报错
a = set((1,'a',5))
a.discard(1) #{5, 'a'}
print(a) b = set(((1,'a',5),2))
b.discard(1) #{2, (1, 'a', 5)}
print(b)
改:
因为集合内部为不可变数据类型所以无法修改其中的元素。
查:
a = {1,2,'a',False,'abc'}
for i in a:
print(i)
#False
#
#
#abc
#a
求交集:
交集定义:集合论中,设A,B是两个集合,由所有属于集合A且属于集合B的元素所组成的集合,叫做集合A与集合B的交集(intersection),记作A∩B。
a = {1,2,3,4}
b = {2,4,5,6}
print(a & b) #{2, 4}
print(a.intersection(b)) #{2, 4}
求并集:
并集定义:给定两个集合A,B,把他们所有的元素合并在一起组成的集合,叫做集合A与集合B的并集,记作A∪B。
a = {1,2,3,4}
b = {2,4,5,6}
print(a | b) #{1, 2, 3, 4, 5, 6}
print(a.union(b)) #{1, 2, 3, 4, 5, 6}
求反交集:
a = {1,2,3,4}
b = {2,4,5,6}
print(a ^ b) #{1, 3, 5, 6}
print(a.symmetric_difference(b)) #{1, 3, 5, 6}
求差集:
就是找前面一个集合独有的
a = {1,2,3,4}
b = {2,4,5,6}
print(a - b) #{1, 3}
print(a.difference(b)) #{1, 3}
print(b - a) #{5, 6}
print(b.difference(a)) #{5, 6}
判断是否为子集:
若原集合中的所有元素都包含在指定集合中,返回True,否则返回False
a = {1,2,3}
b = {'a',1,2,3,4,5,6}
print(a < b) #True
print(a.issubset(b)) #True
判断是否为超集:
判断指定集合中的元素是否包含在原集合中,有则返回True,否则返回False
a = {1,2,3}
b = {'a',1,2,3,4,5,6}
print(b > a) #True
print(b.issuperset(a)) #True
其他:
1.将列表中的元素去重复成一个新的列表(不考虑算法)
a = [1,2,2,33,33,5,6,7,'a','b','a']
a = list(set(a))
print(a) #[1, 2, 33, 'b', 5, 6, 7, 'a']
2.将set()转变为不可变数据类型
a = set({1,2,'a'})
b = {5,7,a}
print(b) #unhashable type: 'set'
a = set({1,2,'a'})
a = frozenset(a)
print(a,type(a)) #frozenset({1, 2, 'a'}) <class 'frozenset'>
b = {a,4,5}
print(b) #{4, 5, frozenset({1, 2, 'a'})}
3.什么元素转化为布尔值为False?
0、[]、()、{}、set()、' '
4.数字和元祖
tu1 = ((100))
tu2 = ((100,))
print(tu1,type(tu1)) #100 <class 'int'>
print(tu2,type(tu2)) #(100,) <class 'tuple'>
元祖里面只有一个元素且不加逗号,那么此元素是什么类型就是什么类型
5.当for循环删除列表中元素时都会产生一个新的列表
li = [1,2,3,4,5,6]
for i in range(len(li)):
del li[i]
print(li) #第一次删除 i = 0,对应索引值 li[i] = 1,删除后列表 li = [2, 3, 4, 5, 6]
#第二次删除 i = 1,对应索引值 li[i] = 3,删除后列表 li = [2, 4, 5, 6]
#第三次删除 i = 2,对应索引值 li[i] = 5,删除后列表 li = [2, 4, 6]
#第四次删除 i = 3,报错 因为到这时候列表的长度是3,小于元素的索引值
将奇数位的数删除:
方法一
li = [1,2,3,4,5,6]
li = li[::2]
print(li)
方法二
li = [1,2,3,4,5,6]
l1 = []
for i in li:
if li.index(i) % 2 == 0:
l1.append(i)
li = l1
print(li) #[1, 3, 5]
6.在遍历一个字典时,不能删除它的键值对
若要删除字典中含'k'的元素:
dic = {'key1' : 2,
'key2' : 3,
'key3' : 'a',
'aey4' : 5}
for i in dic:
if 'k' in i:
del dic[i] #RuntimeError: dictionary changed size during iteration
解决方案:
方法一:
dic1 = {}
for i in dic:
if 'k' not in i:
dic1.setdefault(i,dic[i])
dic = dic1
print(dic) #{'aey4': 5}
方法二:
l = []
for i in dic:
if 'k' in i:
l.append(i)
for i in l:
del dic[i]
print(dic) #{'aey4': 5}
Python学习日记(四) 集合和元祖的更多相关文章
- Python学习记录4-列表、元祖和集合
list列表 一组由有序数据组成的序列 数据有先后顺序 数据可以不是一类数据 list的创建 直接创建,用中括号创建,内容直接用英文逗号隔开 使用list创建 列表包含单个字符串的时候是一个特例 # ...
- python学习-day12:列表、元祖、字典介绍和内置
list:列表 >>>----可以被修改.修改成元素,元素可以使单独的数字,也可以是:新的list. 通过:链表..每个元素存储的时候,同时会指向下一个元素. 二.list编辑修改方 ...
- Python学习日记(四十) Mysql数据库篇 八
Mysql存储过程 存储过程是保存在Mysql上的一个别名(就是一堆SQL语句),使用别名就可以查到结果不用再去写SQL语句.存储过程用于替代程序员写SQL语句. 创建存储过程 delimiter / ...
- Python学习日记(四十一) Mysql数据库篇 九
前言 索引的主要作用是起到约束和加速查找,ORM框架(sqlalchemy)是用类和对象对数据库进行操作 索引的种类 按种类去分 1.普通索引:能够加速查找 2.主键索引:能够加速查找.不能为空.不能 ...
- Python学习日记(四十二) Mysql数据库篇 十
前言 当我们自己去写SQL代码的时候有时候会因为不熟练会导致效率低,再之后要进行许多的优化,并且操作也较为繁琐.因此ORM框架就能够解决上面的问题,它能根据自身的一些规则来帮助开发者去生成SQL代码. ...
- python学习-day14:集合,函数,格式化
一.集合 定义:由不同元素组成的集合.集合是一组无序排列的可hash值, 可以作为字典的key.元素必须是不可变类型:只能存放数字,字符串,字典 特性:集合的目的是将不同的值放在一起,不同的集合之间可 ...
- python学习第四次笔记
python学习第四次记录 列表list 列表可以存储不同数据类型,而且可以存储大量数据,python的限制是 536870912 个元素,64位python的限制是 1152921504606846 ...
- Python 学习日记(第三周)
知识回顾 在上一周的学习里,我学习了一些学习Python的基础知识下面先简短的回顾一些: 1Python的版本和和安装 Python的版本主要有2.x和3.x两个版本这两个版本在语法等方面有一定的区别 ...
- Python学习(四)数据结构(概要)
Python 数据结构 本章介绍 Python 主要的 built-type(内建数据类型),包括如下: Numeric types int float Text Sequence ...
随机推荐
- Java基础 三目运算符 用if-else对其进行解释
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
- nginx-rtmp
最近使用ffmpeg推流为rtmp,进行直播.记录一下nginx-rtmp的配置.因为我们要添加ngin-rtmp模块,所以不能直接apt安装. 下载niginx和nginx-rtmp-module的 ...
- odoo开发笔记--日期or时间字段给定默认值
开发中经常有这样的场景,需要给某个日期或者时间的字段默认值: 例如: 日期,默认今天 时间,默认当前时间 可以在odoo模型定义中进行设置, 如下样例提供参考: test_data = fields. ...
- LeetCode:第K个排列【60】
LeetCode:第K个排列[60] 题目描述 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: &quo ...
- RSA 系统找不到指定的文件
未测试 System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 改为 C ...
- 通过 PECL 安装 PHP 扩展(以 CentOS7 中安装 swoole 为例)
原文地址:https://blog.csdn.net/kikajack/article/details/82495190 常用工具PECL 和 phpize官网文档 PHP 有大量的扩展可以使用,比如 ...
- 使用objcopy实现将文件编译进执行程序
一.简介 工作中可能遇到将一个文件编译进执行程序的需求,例如bin文件.jpg文件等等.实现的方法可以使用脚本来将文件内容写入一个新的C源文件数组,达成编译进程序的目的. 现在介绍一种简单.快捷的方 ...
- Docker创建镜像 并推拉Harbor
创建镜像 一.根据dockerfile创建镜像 文件详解 1.mkdir dockerfile/lib/centos7base/ 创建目录 2.创建Dockerfile vim Dockerfile ...
- 在window10安装Mysql
一:下载 1.1下载地址:https://dev.mysql.com/downloads/mysql/ 1.2解压 D:\InstallSoftWare\MYSQL 2环境变量配置 path里添 ...
- 14 IO流(十一)——装换流InputStreamReader与OutputStreamWriter
什么是转换流 首先,这里的转换流指的是InputstreamReader与OutputStreamWriter. 正如它们的名字,它的作用是将字节流转换为字符流. 为什么要转换为字符流呢?因为对于获取 ...