当前位置: 首页 > news >正文

pyhton基础【6】容器介绍一

一. 容器类型

在Python中,容器类型用于存储、组织和管理数据。主要的容器类型包括列表、元组、字典、集合等。

它们各自有不同的特点和用途:

列表(List):

  • 列表是有序的数据集合,它可以包含任何类型的数据元素,包括数字、字符串、甚至其他容器。
  • 列表是可变的,这意味着可以在程序运行期间更改、添加或删除列表中的元素。
  • 列表非常适合存储允许重复且需要经常修改的数据集合。

元组(Tuple):

  • 元组也是有序的数据集合,但它是不可变的。一旦创建则无法更改其内容。
  • 元组通常用于存放不应更改的数据,比如说函数的参数。
  • 由于元组的不可变性,它可以用作字典的键,而列表不可以。

字典(Dictionary):

  • 字典是一种存储键值对(key-value pairs)的数据结构,其中的键必须是唯一的。
  • 字典是无序的集合,在Python 3.6及以上版本中,字典会维持插入顺序,方便遍历。
  • 字典非常适合于需要快速查找、添加和删除的场景中。

集合(Set):

  • 集合是不重复元素的无序集合。
  • 集合支持数学的集合运算,如并集、交集、差集等。
  • 集合常用于去重,因为它自动过滤掉了重复的元素。

Python容器类型的应用广泛,可以应用于数据存储、数据处理、信息检索、数学计算等领域,了解和熟练运用这些容器类型对于编写高效、简洁的Python代码至关重要。

二. 字符串:
如下定义的变量a,存储的是数字类型的值
a = 100
如下定义的变量b,存储的是字符串类型的值
b = "www.baidu.com"
# 或者
b = 'www.baidu.com'

下标

下标:就是标记空间的一个数字

有些文档叫法为索引,个人觉得其实下标更好的体现它的特点。

如果有字符串:name = 'abcdef',在内存中的实际存储如下:

下标为正数

第0个空间

第1个空间

第2个空间

第3个空间

第4个空间

第5个空间

a

b

c

d

e

f

下标为负数

第 -6 个空间

第 -5 个空间

第 -4 个空间

第 -3 个空间

第 -2 个空间

第 -1 个空间

a

b

c

d

e

f

特点:

  • 每个字符单独存储,各占一个存储空间
  • 为了方便标记处哪个空间存放的是哪个字符,Python使用了下标
  • 如果从左侧开始编号,那么下标从 0 开始
  • 如果从右侧开始编号,那么下标从-1开始
  • 如果字符串只有三个字符:"abc",那么能用的下标为0、1、2不能使用超过2以上的,这种情况就是越界。越界很危险会导致程序崩溃。
name = 'abcdef'print(name[0]) -->a
print(name[1]) -->b
print(name[2]) -->c
三. 字符串切片

什么是切片

较为官方的说法:切片是指对操作的对象截取其中一部分的操作

通俗来说:一种能够从数据中取到一部分数据的方式

例如:

有一个字符串"abcdef",我们可以通过切片取到"cde"

切片不仅可以在字符串中应用,还可以对列表、元组等进行操作,简言之切片功能很重要

使用方式

[起始:结束:步长]

注意:

  • 选取的区间从起始位开始,到结束位的前一位结束(不包含结束位本身),步长表示选取间隔
  • 默认步长为1,即取完一个下标的数据之后,第二个下标的是在刚刚下标基础上+1
  • 步长为正数,表示从左向右取数据
  • 步长为负数,表示从右向左取数据
示例一:
name = 'abcdef'
print(name[0:3])  # 取下标为0、1、2的字符,注意取不到下标为3的空间
运行结果:
abc示例二:
name = 'abcdef'
print(name[:3])  # 取下标为0、1、2的字符,注意取不到下标为3的空间
'''
如果第一个参数没写则默认为0开始
'''
运行结果:
abc示例三:
name = 'abcdef'
print(name[3:5])  # 取下标为3、4 的字符
运行结果:
de示例四:
name = 'abcdef'
print(name[2:])  # 取下标为2开始到最后的字符
运行结果:
cdef示例五:
name = 'abcdef'
print(name[1:-1])  # 取 下标为1开始到右侧最后一个字符之前的所有字符
运行结果:
bcde示例六:
name = 'abcdef'
print(name[1:5:2])
'''
步长为2表示间隔1个值取一次
'''
运行结果:
bd示例七:
name = 'abcdef'
print(name[5:1:-1])
'''
5: 起始位置
1: 结束位置 (不包含)
-1: 步长,表示从右往左取值
'''
运行结果:
fedc示例八:
name = 'abcdef'
print(name[5:1:-2])
'''
5: 起始位置
1: 结束位置 (不包含)
-2: 步长,表示从右往左取值并间隔一个值
'''
运行结果:
fd示例九:
name = 'abcdef'
print(name[::1])
'''
起始位置: 未设置
结束位置: 未设置
1: 步长
表示从最左边取值到最右边(包含最右边)
'''
运行结果:
abcdef示例十:
name = 'abcdef'
print(name[::])
运行结果:
abcdef说明:开始位置、结束位置都未指定,且步长也未指定那么步长用默认的1,则此时从最左取到最右示例十一:
name = 'abcdef'
print(name[::-1])
运行结果:
fedcba说明:开始位置、结束位置都未指定,步长为-1,此时从最右取到最左示例十二:
name = 'abcdef'
print(name[::-2])
运行结果:
fdb说明: 开始、结束位置都未指定,且步长是-2,那么就意味着从右侧往左取数据,且步长为2(即隔一个取一个)

练习

给定一个字符串变量s,请反转字符串:

s = 'Hello World!'
print(s[4])
print(s)
print(s[:]) # 取出所有元素(没有起始位和结束位之分),默认步长为1
print(s[1:]) # 从下标为1开始,取出 后面所有的元素(没有结束位)
print(s[:5])  # 从起始位置开始,取到 下标为5的前一个元素(不包括结束位本身)
print(s[:-1]) # 从起始位置开始,取到 倒数第一个元素(不包括结束位本身)
print(s[-4:-1]) # 从倒数第4个元素开始,取到 倒数第1个元素(不包括结束位本身)
print(s[1:5:2]) # 从下标为1开始,取到下标为5的前一个元素,步长为2(不包括结束位本身)
# python 字符串快速逆序
print(s[::-1])  # 从后向前,按步长为1进行取值

总结

  • 切片使用规则中,要么一个冒号[开始位置:结束位置],要么两个冒号[开始位置:结束位置:步长]
  • 不写步长时,默认为1
  • 步长为正数,表示从左向右取数据 
  • 步长为负数,表示从右向左取数据 
  • 当开始位置、结束位置都没有设定时,要看步长,如果步长为正数此时开始位置理解为最左,结束位置为最右,如果步长为负数此时开始位置理解为最右,结束位置为最左
四. 字符串内置方法
find方法

检测str是否包含在 my_str中,如果是返回开始的索引值,否则返回-1

my_str.find(str, start=0, end=len(mystr))my_str = "welcome to www.baidu.com"
print(my_str.find("to"))
#输出 8
说明:上述运行中数值8表示"to"这个字符串在原字符串的开始下标值是8
rfind方法

类似于find()函数,不过是从右边开始查找,返回的索引是从左边开始

my_str.rfind(str, start=0, end=len(my_str) )my_str = "welcome to www.baidu.com"
my_str.rfind("to")
#输出 8
count方法

返回str在start和end之间在 my_str里面出现的次数

my_str.count(str, start=0, end=len(mystr))my_str = "welcome to www.baidu.com"
my_str.count("w")
#输出 4
replace方法

把my_str中的str1替换成str2,如果count指定,则替换不超过count次

my_str.replace(str1, str2,  mystr.count(str1))my_str = "welcome to www.baidu.com"
my_str.replace('w', 'W', 1)
#输出 'Welcome to www.baidu.com'
split方法

以str为分隔符切片my_str,如果maxsplit有指定值,则仅分隔maxsplit个子字符串

my_str.split(str=" ", maxsplit)my_str = "welcome to www.baidu.com"
my_str.split(" ")
#输出 ['welcome', 'to', 'www.baidu.com']my_str.split(" ", 1)
#输出 ['welcome', 'to www.baidu.com']
startswith方法

检查字符串是否是以指定的字符串开头, 是则返回True,否则返回False

my_str.startswith('这里写入你指定的字符串')my_str = "welcome to www.baidu.com"
my_str.startswith('welcome')
#输出 Truemy_str.startswith('Welcome')
#输出 False
endswith方法

检查字符串是否以指定字符串结束,如果是返回True,否则返回 False

my_str.endswith('这里写入你指定的字符串')my_str = "welcome to www.baidu.com"
my_str.endswith('com')
#输出 True
lower方法

转换 my_str 中所有大写字符为小写

my_str.lower()my_str = "WELCOME to www.baidu.com"
my_str.lower()
#输出 'welcome to www.baidu.com'
upper方法

转换 my_str 中所有小写字母为大写

my_str.upper()my_str = "welcome to www.baidu.com"
my_str.upper()
#输出 'WELCOME TO WWW.BAIDU.COM'
strip方法

删除字符串两端的空白字符

my_str = "   welcome to www.baidu.com   "
my_str.strip()
#输出 'welcome to www.baidu.com'
partition方法

把my_str以str分割成三部分,str前,str和str后

my_str.partition(str)my_str = "welcome to www.baidu.com"
my_str.partition('to')
#输出 ('welcome ', 'to', ' www.baidu.com')my_str = "welcome to www.baidu.com"
print(my_str.partition("w"))
#输出 ('', 'w', 'elcome to www.baidu.com')
splitlines方法

按照行分隔,返回一个包含各行作为元素的列表

my_str.splitlines()my_str = """welcome to www.baidu.com...: thank you...: good good study day day up...: """my_str.splitlines()
#输出 ['welcome to www.baidu.com', 'thank you', 'good good study day day up']
isalpha方法

如果my_str所有字符都是字母则返回True,否则返回False

my_str.isalpha()my_str = "abc123"
my_str.isalpha()
Falsemy_str = "abc"
my_str.isalpha()
True
isdigit方法

如果my_str只包含数字则返回True,否则返回 False

my_str.isdigit()my_str = "abc123"
my_str.isdigit()
Falsemy_str = "123"
my_str.isdigit()
True
isalnum方法

如果my_str所有字符都是字母或数字则返回True,否则返回False
 

my_str.isalnum()my_str = 'abc123'
my_str.isalnum()
Truemy_str = 'abc123_'
my_str.isalnum()
False
join方法

my_str中每个元素后面插入str,构造出一个新的字符串

my_str.join(str)my_str = '-'
str_list = ['welcome', 'to', 'shanghai']
my_str.join(str_list)
'welcome-to-shanghai'

相关文章:

  • Kafka 架构原理解析
  • Leetcode 3299. 连续子序列的和
  • excel中自定义公式
  • 黑马点评【缓存】
  • AI中的Prompt
  • 谷歌云BigQuery分析
  • 「Unity3D」使用C#调用Android的震动功能,有三种方式
  • Linux 内核学习(11) --- Linux 链表结构
  • 按关键字批量合并 Excel 多工作簿工作表攻略-Excel易用宝
  • flowable 数据库表结构分析(超全版)
  • SPP——神经网络中全连接层输出尺寸限制的原因和解决办法
  • 以前在服务器启动了docker,现在不需要了,为了安全,去掉docker服务@Ubuntu
  • NVIDIA Container Toolkit 报错 Failed to initialize NVML: Unknown Error 的解决
  • 实现AI数据高效评估的一种方法
  • SQL进阶之旅 Day 27:存储过程与函数高级应用
  • 鸿蒙 UI 开发基础语法与组件复用全解析:从装饰器到工程化实践指南
  • NAS文件共享、PACS影像存储,速率提升400%?
  • Kotlin 协程与 ViewModel 的完美结合
  • 【二分答案1-----切木棒】
  • 视频自动生成字幕原理和自动生成字幕的应用实例
  • 新加坡室内设计公司排名/优化公司结构
  • 绵阳城乡住房建设厅网站/搜索词
  • 网站中弹出广告怎么做的/百度竞价推广点击软件奔奔
  • 网站建设技术知识/一键注册所有网站
  • 福田我要做网站优化比较好/公司的seo是什么意思
  • 阎良区网站建设/最近比较火的关键词