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

Python 基础教程【3】:字符串、列表、元组

在这里插入图片描述

本文已收录于专栏
🌻
《Python 基础》

文章目录

  • 🌕1、字符串
    • 🥝1.1 字符串基本操作
      • 🍊1.1.1 字符串创建
      • 🍊1.1.2 字符串元素读取
      • 🍊1.1.3 字符串分片
      • 🍊1.1.4 连接和重复
      • 🍊1.1.5 关系运算
      • 🍊1.1.6 成员运算
    • 🥝1.2 字符串的常用方法
  • 🌕2、列表和元组
    • 🥝2.1 列表
      • 🍊2.1.1 列表的创建和下标访问
      • 🍊2.1.2 列表的切片操作
      • 🍊2.1.3 列表的遍历操作
      • 🍊2.1.4 列表的插入操作
      • 🍊2.1.5 列表的查找与删除
      • 🍊2.1.6 列表的拼接
    • 🥝2.2 元组

🌕1、字符串

Python 中的字符串是一个有序的字符集合,用于存储或表示基于文本的信息,它不仅能保存文本,而且能保存非打印字符或二进制数据

重点:

  • 双引号或者单引号中的数据,就是字符串
  • 如果使用一对引号来定义字符串,当出现符号冲突时可以使用转义字符
  • 使用三个单引号、双引号定义的字符串可以包裹任意文本

🥝1.1 字符串基本操作

🍊1.1.1 字符串创建

使用赋值运算符 = 将一个字符串赋值给变量即可创建字符串对象

🍊1.1.2 字符串元素读取

使用索引可以直接访问字符串中的元素,方法为:字符串名称[索引]

🍊1.1.3 字符串分片

采取 字符串名称[开始索引;结束索引;步长] 的方法,从字符串中分离出部分字符

🍊1.1.4 连接和重复

连接: 可以使用运算符 + ,将两个字符串对象连接起来,得到一个新的字符串对象
重复: 使用运算符 * ,构建一个由字符串自身重复连接而成的字符串对象

比如: "hi"*3 输出的是 'hihihi'

🍊1.1.5 关系运算

单字符字符串的比较: 单个字符字符串是按照字符的 ASCII 码值大小进行比较的

多字符字符串的比较: 本质也是按照字符的 ASCII 码值大小进行比较的,先并行地检查两个字符串位于同一个位置的字符,如果这个同一位置的字符的 ASCII 码值大小相等,就向前推进,直到找到两个不同的字符为止

🍊1.1.6 成员运算

字符串使用 innot in 运算符判断一个字符串是否属于另一个字符串,

一般形式为 字符串1 [not] in 字符串2

返回值为 TrueFalse

🥝1.2 字符串的常用方法

str.find(substr,start,end)

在主串中查找子串,如果找到则返回子串在主串中的位置,找不到则返回 -1
substr 是要查找的子串,start 和 end 是可选项,分别表示查找的开始位置和结束位置

str.replace(old,new)

用字符串 new 替代 str 中的 old

str.split(sep)

以 sep 为分隔符,把 str 分离成一个列表

str.strip()

去掉 str 中两端空格

str.lower()

把 str 中所有大写字母转换为小写

str.upper

把 str 中所有小写字母转换为大写

🌕2、列表和元组

一个变量来表示很多个数据,类似于其他编程语言中的 “数组”

列表和元组,大部分的功能是差不多的,但是有一个功能是非常明显的 区别:

列表是可变的:创建好了之后,随时能改
元组是不可变的:创建好了之后,改不了,要想改,只能丢弃旧的,搞个新的

🥝2.1 列表

🍊2.1.1 列表的创建和下标访问

# 1.直接使用字面值来创建
#  [] 就表示一个 空的列表
a = []
print(type(a))  # 打印类型# 2.使用 list() 来创建
b = list()
print(type(b))  # 打印类型# 3. 可以在创建列表的时候,在 [] 中指定列表的初始值
#   元素之间使用 , 来分割
a = [1, 2, 3, 4]
print(a)

C++/Java 里面要求一个数组里只能存相同类型的变量,Python 里的 列表则无限制,放啥类型都可以

下标从 0 开始计数

🍊2.1.2 列表的切片操作

# 1.切片操作的基本使用
a = [1, 2, 3, 4]
print(a[1:3])   # 输出 [2, 3]

切片操作里,[] 里面有两个数字,表示了一段区间,

1:3
取到下标为 1 一直到 下标为 3 的元素
(包含1,不包含3)
[1,3)

# 2. 使用切片的时候,省略边界
a = [1, 2, 3, 4]
# 省略后边界,意思是从开始位置,一直取到整个列表结束
print(a[1:])
# 省略前边界,意思是从列表的 0号元素开始,一直取到结束的后边界
print(a[:2])
# 此处切片中的下标也可以写成负数
print(a[:-1])  # 输出 [1, 2, 3] 打印到倒数第2个元素
# 还可以把开始边界和结束边界都省略掉!得到的是列表自身
print(a[:])

切片的操作是一个比较高效的操作, 进行切片的时候,只是取出了原有列表中的一个部分,并不涉及到 “数据的拷贝”,假如有一个很大的列表,进行切片,切片的范围很大,即使如此,切片操作仍然非常高效

# 3. 带有步长的切片操作
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[::1])  # 输出[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[::2])  # 输出[1, 3, 5, 7, 9]

切片操作,还可以指定 “步长”

步长的数值还可以是负数,当步长为负数的时候,意思是从后往前来取元素

当切片中的范围超出有效下标之后,不会出现异常!而是尽可能把符合要求的元素获取到

🍊2.1.3 列表的遍历操作

# 1.使用for循环来遍历列表
a = [1, 2, 3, 4, 5]
for elem in a:print(elem)# 2.使用for循环遍历,通过下标的方式
a = [1, 2, 3, 4, 5]
for i in range(0, len(a)):a[i] = a[i] + 10print(a[i])# 3.使用while循环,通过下标遍历
a = [1, 2, 3, 4, 5]
i = 0
while i < len(a):print(a[i])i += 1

第一种方法是把列表中的元素赋给elem,不能修改列表值,第二、三种可以利用下标修改列表值

🍊2.1.4 列表的插入操作

# 1.使用 append 往列表末尾新增一个元素
a = [1, 2, 3, 4, 5]
a.append(5)# 2.使用 insert 方法,往列表的任意位置新增元素
a = [1, 2, 3, 4]
a.insert(1, 'hello')
a.insert(100, 'hello')  # 不会放在第101个位置,而是末尾

🍊2.1.5 列表的查找与删除

查找:

# 1.使用 in 来判定某个元素是否在列表中存在
a = [1, 2, 3, 4]
print(1 in a)   # in 在列表中打印 True
print(10 in a)  # in 不在列表中打印 False
print(1 not in a)
print(10 not in a)# 2.使用 index 方法,来判定,当前元素在列表中的位置,得到一个下标 
a = [1, 2, 3, 4]
print(a.index(2))
print(a.index(10))   # 不存在,引发异常

删除:

# 1.使用 pop 删除列表中最末尾的元素
a = [1, 2, 3, 4]
a.pop()
print(a)# 2.使用 pop 还能删除任意位置的元素,pop 的参数可以传一个下标过去
a = [1, 2, 3, 4]
a.pop(1)
print(a)# 3.使用 remove 方法,可以按照值来进行删除
a = ['aa', 'bb', 'cc', 'dd']
a.remove('cc')
print(a)

🍊2.1.6 列表的拼接

# 1.使用 + 针对两个列表进行拼接
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
c = b + a
print(c)
print(a)
print(b)# 2.使用 extend 来进行拼接
# 这个拼接是把后一个列表的内容拼接到前一个列表里头,即会修改前一个列表
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)  # extend没有返回值
print(a)
print(b)# 3.使用 += 进行拼接
a = [1, 2, 3]
b = [4, 5, 6]
a += b  # 等价于 a = a + b
print(a)
print(b)

使用 + 进行拼接的时候,只是针对当前列表的内容生成了一个更大的新的列表,原有列表是不变的

🥝2.2 元组

创建元组

# 1.创建元组
a = ()
print(type(a))
b = tuple()
print(type(b))# 2.创建元组的时候指定初始值
a = (1, 2, 3, 4)
print(a)

元组中的元素也可以是任意类型的

a = (1, 2, 3, 4)
print(a[1])
print(a[-1])

通过下标来访问元组中的元素,下标也是从 0 开始,到 len - 1 结束

a = (1, 2, 3, 4)
print(a[1:3])

通过切片来获取元组中的一个部分

也同样可以使用 for 循环等方式进行遍历元素

可以使用 in 来判定元素是否存在,使用 index 查找元素的下标

可以使用 + 来拼接两个元组

元组只支持 “读” 操作,不支持 “修改” 类操作

当进行多元赋值的时候,其实本质上是按照元组的方式来进行工作的

相关文章:

Python 基础教程【3】:字符串、列表、元组

本文已收录于专栏&#x1f33b;《Python 基础》文章目录&#x1f315;1、字符串&#x1f95d;1.1 字符串基本操作&#x1f34a;1.1.1 字符串创建&#x1f34a;1.1.2 字符串元素读取&#x1f34a;1.1.3 字符串分片&#x1f34a;1.1.4 连接和重复&#x1f34a;1.1.5 关系运算&…...

(数据结构)八大排序算法

目录一、常见排序算法二、实现1. 直接插入排序2.&#x1f31f;希尔排序3. 选择排序4.&#x1f31f;堆排序5. 冒泡排序7. &#x1f31f;快速排序7.1 其他版本的快排7.2 优化7.3 ⭐非递归7. &#x1f31f;归并排序7.1 ⭐非递归8. 计数排序三、总结1. 分析排序 (Sorting) 是计算机…...

构建GRE隧道打通不同云商的云主机内网

文章目录1. 环境介绍2 GRE隧道搭建2.1 华为云 GRE 隧道安装2.2 阿里云 GRE 隧道安装3. 设置安全组4. 验证GRE隧道4.1 在华为云上 ping 阿里云云主机内网IP4.2 在阿里云上 ping 华为云云主机内网IP5. 总结1. 环境介绍 华为云上有三台云主机&#xff0c;内网 CIDR 是 192.168.0.0…...

48天C++笔试强训 001

作者&#xff1a;小萌新 专栏&#xff1a;笔试强训 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;讲解48天笔试强训第一天的题目 笔试强训 day1选择题12345678910编程题12选择题 1 以下for循环的执行次数是&#xff08;&#xff…...

Android 11新增系统服务

1.编写.aidl文件存放位置&#xff1a;frameworks/base/core/java/android/ospackage android.os;interface ISystemVoiceServer {void setHeightVoice(int flag);void setBassVoice(int flag);void setReverbVoice(int flag);}2.将.aidl文件添加到frameworks/base/Android.bp f…...

“你要多弄弄算法”

开始瞎掰 ▽ 2月的第一天&#xff0c;猎头Luna给我推荐了字节的机会&#xff0c;菜鸡我呀&#xff0c;还是有自知之明的&#xff0c;赶忙婉拒&#xff1a;能力有限&#xff0c;抱歉抱歉。 根据我为数不多的和猎头交流的经验&#xff0c;一般猎头都会稍微客套一下&#xff1a…...

【数据结构】千字深入浅出讲解队列(附原码 | 超详解)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;C语言实现数据结构 &#x1f4ac;总结&#xff1a;希望你看完…...

vue面试题(day04)

vue面试题vue插槽&#xff1f;vue3中如何获取refs&#xff0c;dom对象的方式&#xff1f;vue3中生命周期的和vue2中的区别&#xff1f;说说vue中的diff算法&#xff1f;说说 Vue 中 CSS scoped 的原理&#xff1f;vue3中怎么设置全局变量&#xff1f;Vue中给对象添加新属性时&a…...

自动标注工具 Autolabelimg

原理简介~~ 对于数据量较大的数据集&#xff0c;先对其中一部分图片打标签&#xff0c;Autolabelimg利用已标注好的图片进行训练&#xff0c;并利用训练得到的权重对其余数据进行自动标注&#xff0c;然后保存为xml文件。 一、下载yolov5v6.1 https://github.com/ultralytic…...

2023-03-20干活

transformer复现 from torch.utils.data import Dataset,DataLoader import numpy as np import torch import torch.nn as nn import os import time import math from tqdm import tqdmdef get_data(path,numNone):all_text []all_label []with open(path,"r",e…...

Java 注解(详细学习笔记)

注解 注解英文为Annotation Annotation是JDK5引入的新的技术 Annotation的作用&#xff1a; 不是程序本身&#xff0c;可以对程序做出解释可以被其他程序&#xff08;比如编译器&#xff09;读取。 Annotation的格式&#xff1a; 注解是以注解名在代码中存在的&#xff0c;还…...

LeetCode:35. 搜索插入位置

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340;算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;35. 搜索插入位置 题目描述&#xff1a;给定一个排序数组和一个目标值&…...

菜鸟刷题Day2

菜鸟刷题Day2 一.判定是否为字符重排&#xff1a;字符重排 描述 给定两个由小写字母组成的字符串 s1 和 s2&#xff0c;请编写一个程序&#xff0c;确定其中一个字符串的字符重新排列后&#xff0c;能否变成另一个字符串。 解题思路&#xff1a; 这题思路与昨天最后两道类似&…...

Selenium基础篇之不打开浏览器运行

文章目录前言一、场景二、设计1.引入库2.引入浏览器配置3.设置无头模式4.启动浏览器实例&#xff0c;添加配置信息5.访问质量分地址6.隐式等待5秒7.定位到输入框8.输入博文地址9.定位到查询按钮10.点击查询按钮11.定位到查询结果模块div12.打印结果13.结束webdriver进程三、结果…...

【数据结构初阶】栈与队列笔试题

前言在我们学习了栈和队列之后&#xff0c;今天来通过几道练习题来巩固一下我们的知识。题目一 用栈实现队列题目链接&#xff1a;232. 用栈实现队列 - 力扣&#xff08;Leetcode&#xff09;这道题难度不是很大&#xff0c;重要的是我们对结构认识的考察&#xff0c;由于这篇文…...

【Linux入门篇】操作系统安装、网络配置

目录 &#x1f341;Linux详解 &#x1f342;1.操作系统 &#x1f342;2.操作系统组成 &#x1f342;3.操作系统历史 &#x1f342;4.常见的Linux系统 &#x1f342;5.centos7下载 &#x1f342;6.安装centos7 &#x1f341;linux初始化配置 &#x1f343;1.虚拟机系统安装后操作…...

Selenium:找不到对应的网页元素?常见的一些坑

目录 1. 用Xpath查找数据时无法直接获取节点属性 2. 使用了WebDriverWait以后仍然无法找到元素 2.1. 分辨率原因 2.2. 需要滚动页面 2.3. 由于其他元素的遮挡 1. 用Xpath查找数据时无法直接获取节点属性 通常在我们使用xpath时&#xff0c;可以使用class的方式直接获取节…...

flex布局优化(两端对齐,从左至右)

文章目录前言方式一 nth-child方式二 gap属性方式三 设置margin左右两边为负值总结前言 flex布局是前端常用的布局方式之一&#xff0c;但在使用过程中&#xff0c;我们总是感觉不太方便&#xff0c;因为日常开发中&#xff0c;大多数时候&#xff0c;我们想要的效果是这样的 …...

【Django 网页Web开发】03. 初识Django(保姆级图文)

目录1. 命令行创建与pycharm创建的区别2. 项目结构信息2.1 项目结构2.2 项目app结构2.3 快速查看项目结构树3. 创建并注册app3.1 创建app3.2 注册app4. 编写URL与视图的对应关系5. 编写视图文件6. 启动项目7. 写多个页面8. templates模板的使用8.1 编写html文件8.3 导入html文件…...

KubeSphere All in one安装配置手册

KubeSphere All in one安装配置手册 1. 初始化 1.1 配置apt源 # vi /etc/apt/sources.list deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiversedeb…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...