Python学习记录4-列表、元祖和集合
list列表
- 一组由有序数据组成的序列
- 数据有先后顺序
- 数据可以不是一类数据
- list的创建
- 直接创建,用中括号创建,内容直接用英文逗号隔开
- 使用list创建
- 列表包含单个字符串的时候是一个特例
# 直接赋值创建列表
>>> L1 = [1,2,3,4,5]
# list内的数据可以不是一个类型
>>> L2 = [1,2,3,"China","小明"]
# 创建列表的第二种方式
>>> L3 = list()
>>> print(L1)
>>> print(L2)
>>> print(L3) #L3是一个空的列表
>>> print(type(L3))#内置函数 type() 显示变量的类型b
输出:
[1, 2, 3, 4, 5]
[1, 2, 3, 'China', '小明']
[]
<class 'list'>
---------------------------------------------------------------------------------------------------
# list创建的特例
>>> s = "Ha ha"
#想创建就包含s一个字符串的列表
>>> L1 = list(s)
# 此种情况用 L1 = [s]
>>> print(L1)
>>> print(type(L1))
输出:
['H', 'a', ' ', 'h', 'a']
<class 'list'>
列表的常见操作
- 访问
- 使用下标操作,也叫索引
- 列表的元素索引是从0开始
- 切片操作
- 对列表进行任意一段的截取
- 截取之后,创建一个新的列表
>>> L1 = [22,23,45,65,342,545]
#使用下标访问
>>> print(L1[0])
#如果下标超标 会报错 list index out of range
输出:
22
---------------------------------------------------------------------------------------------------
# 切片操作需要注意取值范围,左包括右不包括
>>> L1 = [1,2,3,4,5,6,7,8,9,10]
>>> print(L1[1:7])
# 下面结果说明切片后生成的是一个全新的列表
# 通过内置函数id可以判断出切片是否生成了全新的列表
# id的作用是用来判断两个变量是否是一个变量
>>> L2 = L1[0:10] #把L1的值全部赋给 L2变量
>>> print(id(L1)) #通过id比较发现内存地址不同
>>> print(id(L2)) #这说明切片后是生成了全新的列表
# 切片下标可以为空
>>> print(L1[:4]) #从开头截取到下标3 因为右不包括 所以取不到下标4
>>> print(L1[2:]) #从下标2开始截取到结尾
>>> print(L1[:]) #从开头到结尾 即全部
输出:
[2, 3, 4, 5, 6, 7]
4543225360
4542443760
[1, 2, 3, 4]
[3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 分片可以控制增长幅度,默认增长幅度为1
>>> print(L1[::1]) # 等于print(L1[:])
>>> print(L1[::2])
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 3, 5, 7, 9]
# 下标可以超出范围,超出后不再考虑多余下标内容
>>> print(L1[:100])
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
---------------------------------------------------------------------------------------------------
# 下标值,增长幅度可以为负数
# 如果下标值为负数,表明顺序是从右往左
# 规定:数组最后一个数字的下标是-1
# 这样子输出的为空,这是因为默认是从左向右移动
>>> print(L1[-2:-5])
# 如果想利用负数下标打印7,8,9 则
>>> print(L1[-2:-5:-1]) #此时虽然打印出来了但是顺序是 9 8 7是反着的
# 调整打印的顺序
>>> print(L1[-5:-2:1]) #此时顺序虽然对了 但是下标不对了 这是由于左包括 右不包括
#最终调整
>>> print(L1[-4:-1:1])
输出:
[]
[9, 8, 7]
[6, 7, 8]
[7, 8, 9]
tuple(元祖)
- 可以理解成一个不允许更改的列表
# tuple的创建
# 1. 直接用小括号创建
>>> ta = ()
>>> print(type(ta))
# 特殊情况:当用小括号创建一个元素的tuple的时候
>>> tb = (100) # 这种情况下 只有一个元素 并不识别这是一个tuple 因为可能是数学中的小括号 所以不识别 这是特例 需要加逗号表示这是一个tuple
>>> print(type(tb))
>>> tc = (100,)
>>> print(type(tc))
# 2.直接用逗号
>>> ta = 100,
>>> print(type(ta))
>>> ta = 100, 200, 300, #多个元素时 后面可以跟 也可以不跟
>>> print(type(ta))
# 3.使用tuple定义
>>> ta = tuple()
>>> print(ta)
>>> li = [1,2,3,"hahah ha"]
>>> tb = tuple(li) # 这种创建方式必须要求tuple的参数是可迭代的 例如一个数字就不行
>>> print(tb)
>>> print(li)
输出:
<class 'tuple'>
<class 'int'>
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
()
(1, 2, 3, 'hahah ha')
[1, 2, 3, 'hahah ha']
tuple其余特征跟list基本一致
- 有序
- 可以访问不可以被修改
- 元素可以是任意类型
# tuple索引操作
>>> la = ["i","love","China"]
>>> print(la)
>>> ta = tuple(la)
>>> print(ta[2])
输出:
['i', 'love', 'China']
China
# tuple分片操作
>>> print(ta[:])
>>> print(ta[:2])
>>> print(ta[-1::-1])
输出:
('i', 'love', 'China')
('i', 'love')
('China', 'love', 'i')
---------------------------------------------------------------------------------------------------
# 元祖的相加
>>> ta = 100,200,300
>>> tb = ("I","love","China")
>>> tc = ta + tb
>>> print(tc)
输出:
(100, 200, 300, 'I', 'love', 'China')
# tuple 乘法
>>> tc = tb * 2
>>> print(tc)
输出:
('I', 'love', 'China', 'I', 'love', 'China')
---------------------------------------------------------------------------------------------------
# tuple 成员检测
print(tb)
>>> if "China" in tb:
print("在的")
>>> if "I" not in tb:
print("不在")
输出:
('I', 'love', 'China')
在的
# 元祖遍历
>>> for i in tb:
print(i)
输出:
I
love
China
---------------------------------------------------------------------------------------------------
ta = ((10,20,30),("i","love","China"),(100,200,300))
# 嵌套元祖的 访问
# 1. 双层循环访问 每个元素都是一个元祖 再遍历每一个元祖即可取出
>>> for i in ta:
print(i)
for j in i:
print(j)
>>> print("------分割线-------")
# 单层循环 此种方式 i,j,k要跟元祖的元素个数对应
>>> for i,j,k in ta:
print(i,j,k)
输出:
(10, 20, 30)
10
20
30
('i', 'love', 'China')
i
love
China
(100, 200, 300)
100
200
300
------分割线-------
10 20 30
i love China
100 200 300
---------------------------------------------------------------------------------------------------
# 常用元祖函数
>>> ta = (123,232,45,34)
# len:长度
>>> print(len(ta))
# max/min:最大值/ 最小值
>>> print(max(ta))
>>> tb = (1,2,3,"love") #会报错 int和str类型不能比较
>>> print(max(tb))
输出:
4
232
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-29-e86ab84987e6> in <module>
7
8 tb = (1,2,3,"love")
----> 9 print(max(tb))
TypeError: '>' not supported between instances of 'str' and 'int'
# count:对某一元素计数
>>> ta = (1,2,3,34,2,2,2,2)
>>> print(ta.count(2))
#index:某一元素所在的位置
>>> print(ta.index(1))
输出:
5
0
---------------------------------------------------------------------------------------------------
# tuple的特殊用法
>>> a = 100
>>> b = "I hahah"
# 要求对a,b值进行互换
# 此种用法是python的特殊用法 在其他语言中一般是借助一个中间变量
>>> print(a,b)
>>> a,b = b,a
>>> print(a,b)
输出:
100 I hahah
I hahah 100
集合
- 跟数学中集合的概念一致
- 内容无序 + 内容不重复
# 集合的定义
# 1.通过set关键字
>>> sa = set()
>>> print(sa)
>>> print(type(sa))
# 2. 使用list创建
>>> li = [1,2,3,4,45,54,34,1,2]
>>> sb = set(li)
>>> print(sb)
# 3. 使用大括号 注意是大括号 用小括号会报错
>>> sc = {1,2,3,4,45,54,34,1,2,4545,6757,345}
>>> print(sc)
输出:
set()
<class 'set'>
{1, 2, 3, 4, 34, 45, 54}
{1, 2, 3, 4, 34, 4545, 6757, 45, 54, 345}
---------------------------------------------------------------------------------------------------
# in 操作
>>> if 2 in sc:
print(22222)
>>> if 23 in sc:
print(1111)
>>> for i in sc: #通过循环可以看出 set确实是无序的
print(i)
输出:
22222
1
2
3
4
34
4545
6757
45
54
345
---------------------------------------------------------------------------------------------------
# 集合的另一种遍历
>>> sa = {(1,2,3),(4,5,6),("I","love","China")}
>>> for i,j,k in sa:
print(i,j,k)
输出:
I love China
4 5 6
1 2 3
# 集合的生成式
>>> sa = {1,2,3,4,5,6,7,8,9,10}
# 利用sa生成一个sb
>>> sb = {i for i in sa}
>>> print(sb)
>>> sc = {i for i in sa if i % 2 == 0}
>>> print(sc)
# 双重for循环
# 把sa中的每一个元素的平方生成一个新的集合
# 1. 用一个for
>>> sd = {i**2 for i in sa}
>>> print(sd)
# 2.使用 enumerate
>>> for index, every in enumerate(sa):
print (index , every)
# 3.使用 iter() 迭代器
>>> for every in iter(sa):
print (every)
输出:
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
{2, 4, 6, 8, 10}
{64, 1, 4, 36, 100, 9, 16, 49, 81, 25}
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, 30, 32, 35, 36, 40, 42, 45, 48, 49, 50, 54, 56, 60, 63, 64, 70, 72, 80, 81, 90, 100}
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
1
2
3
4
5
6
7
8
9
10
---------------------------------------------------------------------------------------------------
# 集合的内置函数
# len:长度
>>> print(len(se))
# max/min :最值
# add:向集合中添加元素
>>> sa = {1,2,3,4,5,6,7,3,2,1}
>>> print(sa)
#使用add添加元素打印的结果却是None
>>> print(sa.add(0))
>>> sb = sa
>>> print(sb)
>>> sb.update({8,9,10})
>>> print(sb)
# clear:清空
输出:
42
{1, 2, 3, 4, 5, 6, 7}
None
{0, 1, 2, 3, 4, 5, 6, 7}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
---------------------------------------------------------------------------------------------------
# 删除操作
# remove 和 discard的区别
>>> sa = {1,2,3,4,5,6,7}
>>> print(sa)
>>> sa.remove(5)
>>> print(sa)
#使用discard和remove都可以删除set当中的元素,
#区别就是remove的元素在set当中没有的话会报错,而discard不会。
#像上面的sa 集合 如果我执行remove(5)两次就会报错 因为第一次已经删除了
#第二次sa集合中已经没有了 而用discard(5) 执行几次都不会报错
输出:
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 6, 7}
# pop弹出集合的一个内容
# 删除的内容是随机的
# 删除的内容没什么规律 随机
>>> sa = {1,2,3,4,5,6,7}
>>> print(sa)
>>> sa.pop()
>>> print(sa)
>>> sa.pop()
>>> print(sa)
>>> sa.pop()
>>> print(sa)
输出:
{1, 2, 3, 4, 5, 6, 7}
{2, 3, 4, 5, 6, 7}
{3, 4, 5, 6, 7}
{4, 5, 6, 7}
---------------------------------------------------------------------------------------------------
# 集合的数学操作
# intersection:交集
>>> sa = {1,2,3,4,5,6}
>>> sb = {4,5,6,7,8,9}
#sa 和 sb的交集
>>> print(sa.intersection(sb))
#difference: 差集
>>> print(sa.difference(sb))
#差集的另一种表示
>>> print(sa - sb)
#union:并集 注意 并集是无法用+计算的
>>> print(sa.union(sb))
输出:
{4, 5, 6}
{1, 2, 3}
{1, 2, 3}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
frozenset冰冻集合
- 不允许修改的集合
# 冰冻集合
>>> print(sa)
>>> sb= frozenset(sa)
>>> print(sb)
输出:
{1, 2, 3, 4, 5, 6}
frozenset({1, 2, 3, 4, 5, 6})
总结
数据结构是重点,以上只是总结了一部分,还需要多加练习和思考,彻底弄懂。
Python学习记录4-列表、元祖和集合的更多相关文章
- Python学习笔记---切片 列表 元祖 字典 集合
列表[1,2,3,2]#[] 元祖(1,2,3,2)#() 字典{1:2,3:2}#{} 集合{1,2,3,2}#{} 1,集合与列表的区别,集合里不能有重复元素 2.字典与集合的区别,都是用花括号表 ...
- Python学习day4 数据类型Ⅱ(列表,元祖)
day4 知识补充&数据类型:列表,元祖 1.知识补充 1.编译型/解释型 编译型:在代码编写完成之后编译器将其变成另外一个文件教给你算计执行. 代表语言:Java,c,c++ ,c#, Go ...
- Python基础5:列表 元祖 字典 集合
[ 列表] 列表(list)是Python以及其他语言中最常用到的数据结构之一.Python使用使用中括号 [ ] 来解析列表. 列表是可变的(mutable)——即:可以改变列表的内容. 相关操作: ...
- Python基础5:列表 元祖 字典 集合 Json
[ 列表] 列表(list)是Python以及其他语言中最常用到的数据结构之一.Python使用使用中括号 [ ] 来解析列表. 列表是可变的(mutable)——即:可以改变列表的内容. 相关操作: ...
- python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍
目录 python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍.md 一丶字典 1.字典的定义 2.字典的使用. 3.字典的常用方法. python学习第八讲,python ...
- python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍
目录 python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍 一丶元祖 1.元祖简介 2.元祖变量的定义 3.元祖变量的常用操作. 4.元祖的遍历 5.元祖的应用场景 p ...
- python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍
目录 python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍. 二丶列表,其它语言称为数组 1.列表的定义,以及语法 2.列表的使用,以及常用方法. 3.列表的常用操作 ...
- Python入门 [输出,注释,列表,元祖,集合,字典,if,while,for]
print("Hello Python") #输出 ''' 多行注释 用 三个引号 ''' a=1 #赋值 变量首字母只能书字母下划线 第二个字符数字,字母,下划线 声明一个列表 ...
- python 中的 字符串 列表 元祖 字典
str 1 格式化输出 %法 第一种 %s+tuple %d+tuple name = input('请输入你的姓名:') age = input('请输入你的年龄:') hobby = input( ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
随机推荐
- iOS-项目重构(浅谈)
如何重构 首先,要对程序的一般架构烂熟于心,尤其是MVC,这是基本.还有就是分离存储和网络请求的逻辑. 对于一些常用的控件尽量分离复用,设置开关函数,适当的时候开启,不要的时候关闭,有必要的话还可以 ...
- swift 第四课 随意 设置button 图片和文字 位置
项目中经常遇到按钮改变文字和图片位置的情况,所以尝试写一个 button 的分类: 参照连接 http://blog.csdn.net/dfqin/article/details/37813591 i ...
- HANA数据自助查询
SAP HANA的客户端是C/S模式的,远程使用不太方便,目前有一款TreeSoft数据库管理系统,可以实现通过web方式,访问自助查询HANA数据.大大提高工作效率.还支持MySQL,Oracle, ...
- vue项目中使用v-for的方法莫名提示错误
错误示例: 解决方法一: 在v-for后面绑定key,示例如下→ 解决方法二: 点击左下角“设置”>“用户设置”内添加一下代码片段: { "vetur.validation.templ ...
- webdriervAPI(上传文件)
from selenium import webdriver driver = webdriver.Chorme() drvier.implicitly_wait(10) driver.ge ...
- LeetCode刷题1——只出现一次的数字
一.题目要求 二.题目背景 位运算:或,异或,与,移位 三.解题思路 (1)要求算法时间复杂度是线性的,O(n),想到的是先将列表排序,排序后相同的数值两两之间前后相邻,进行偶数次循环,判断两两数值是 ...
- 【DSP开发】帮您快速入门 TI 的 Codec Engine
德州仪器半导体技术(上海)有限公司 通用DSP 技术应用工程师 崔晶 德州仪器(TI)的第一颗达芬奇(DaVinci)芯片(处理器)DM6446已经问世快三年了.继DM644x之后,TI又陆续推出了D ...
- 洛谷 题解 P3942 【将军令】
本题算法:贪心+排序+搜索+并查集+图论 输入中的t可以不用管,毕竟这只是特殊情况的标志 题目中虽然没有很明确地说明这是一棵树,但是题目中说有n个点,但是只有n-1条边,想用这n-1条边把整个图连通起 ...
- HDU6739 Invoker 【dp】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6739 借鉴了这个网址的题解:https://blog.csdn.net/qq_41785863/art ...
- 开发者福利!请及时领取您的SpreadJS临时部署授权码
SpreadJS 于2015年发布,至今已有4年历史,作为一款基于 HTML5 的纯前端电子表格控件,在短短四年间,即在财税.金融.计算机软件与服务.工业制造.大数据应用.电力能源.交通.物流运输.医 ...