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个空间 |
|
|
|
|
|
|
下标为负数
第 -6 个空间 | 第 -5 个空间 | 第 -4 个空间 | 第 -3 个空间 | 第 -2 个空间 | 第 -1 个空间 |
|
|
|
|
|
|
特点:
- 每个字符单独存储,各占一个存储空间
- 为了方便标记处哪个空间存放的是哪个字符,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'