一篇搞懂Python中字符串和列表的基本操作(新手必看)

 更新时间:2026年07月30日 08:46:36   作者:着迷不白  
字符串和列表是 Python 中最常用的两种序列类型,本文介绍了Python中字符串和列表的基本操作,文章通过示例演示核心功能,帮助读者掌握这两种最常用的数据结构,适合Python初学者巩固基础知识,为后续学习字典和集合打下基础

字符串和列表是 Python 中最常用的两种序列类型。字符串是不可变的字符序列,列表是可变的任意元素序列。本篇带你掌握字符串的下标、切片、常用方法,以及列表的增删改查操作。作业 + 答案在文末,方便自测。

前言

在前两篇笔记中,我们学习了变量、数据类型、输入输出以及类型转换。从本篇开始,我们将正式接触 Python 中最重要的两种数据结构——字符串和列表。

  • 字符串:由一个个字符组成,比如 "hello",一旦创建就不能修改(不可变)。
  • 列表:可以存放任意类型的数据,比如 [1, 2, "a"],并且可以随时增删改(可变)。

掌握它们,你就能处理大多数文本数据和集合数据了。

一、字符串基础

字符串可以使用单引号、双引号或三引号创建。三引号常用于多行字符串。

创建与拼接

# 单引号
s1 = 'Hello'

# 双引号
s2 = "world"

# 三引号(可换行)
s3 = """这是
多行字符串"""

# 拼接
s4 = s1 + ", " + s2 + "!"
print(s4)   # Hello, world!

二、字符串下标(索引)

每个字符在字符串中都有一个下标(索引),从 0 开始。可以用 [下标] 获取对应字符。

正下标(从左到右)

my_string = "Hello, world!"
print(my_string[0])   # H(第一个字符)
print(my_string[4])   # o(第五个字符)
print(my_string[7])   # w(第八个字符)

下标不能超出范围,否则报错 IndexError

负下标(从右到左)

my_string = "Hello, world!"
print(my_string[-1])   # !(最后一个字符)
print(my_string[-2])   # d(倒数第二个字符)
print(my_string[-8])   # ,(逗号)

小练习:提取指定字符

str1 = "python"
print(str1[1])   # y(第2个字符)
print(str1[4])   # o(第5个字符)

三、字符串切片

切片用于获取字符串中的一段子串,语法:[start:stop:step]

  • start:起始下标(包含),省略则从开头开始
  • stop:结束下标(不包含),省略则到末尾结束
  • step:步长,默认 1,可为负数(反向)

基本切片示例

s = "Hello, world!"
print(s[0:5])    # Hello(下标0~4)
print(s[7:])     # world!(下标7到末尾)
print(s[:5])     # Hello(省略start,默认0)
print(s[::])     # Hello, world!(完整字符串)

使用步长

s = "Hello, world!"
print(s[::2])    # Hlo ol!(每隔一个取一个)

负数步长(反转字符串)

s = "Hello"
print(s[::-1])   # olleH

小练习:切片提取

str2 = "Python"
print(str2[2:4])   # th(下标2~3)
print(str2[1::3])  # yo(从下标1开始,步长3)

四、字符串常用方法

方法作用示例
len(s)获取字符串长度len("hello") → 5
s.find(sub)查找子串,返回下标,找不到返回 -1"hello".find("ll") → 2
s.index(sub)查找子串,找不到报错"hello".index("ll") → 2
s.replace(old, new)替换子串"a,b".replace(",","-")"a-b"
s.split(sep)按分隔符拆分成列表"a,b".split(",")['a','b']
s.isalpha()是否全为字母"abc".isalpha() → True
s.isdigit()是否全为数字"123".isdigit() → True
s.upper()转大写"hi".upper()"HI"
s.lower()转小写"HI".lower()"hi"

查找与替换

s = "hello world"
print(s.find("world"))   # 6
print(s.find("python"))  # -1

old_str = "I like apples, apples are delicious."
new_str = old_str.replace("apples", "oranges")
print(new_str)  # I like oranges, oranges are delicious.

拆分与判断

# 拆分
s = "apple, banana, cherry"
print(s.split(", "))   # ['apple', 'banana', 'cherry']

# 判断
print("Hello".isalpha())     # True
print("123".isdigit())       # True
print("Hello123".isalpha())  # False

大小写转换

print("hello".upper())   # HELLO
print("HELLO".lower())   # hello

格式化(format 方法)

name = 'Tom'
age = 20
print('我的名字是{},已经{}岁啦'.format(name, age))
# 我的名字是Tom,已经20岁啦

 更推荐使用 f-string(前面已学),更简洁:f"我的名字是{name},已经{age}岁啦"

综合练习

# 1. 计算长度
str1 = "Hello, world!"
print(len(str1))   # 13

# 2. 替换逗号为空格
str2 = "Hello, world, Python!"
print(str2.replace(",", " "))   # Hello world Python!

# 3. 拆分字符串
str3 = "Hello, world, Python"
words = str3.split(", ")
print(words)   # ['Hello', 'world', 'Python']

# 4. 判断是否全为字母
str4 = "Hello123"
print(str4.isalpha())   # False

五、列表基础

列表是有序可变的序列,可以存储任意类型的元素,用 [] 定义,元素之间用逗号分隔。

创建列表

my_list = [1, 2, 3, 'a', 'b', 'c']
print(my_list)   # [1, 2, 3, 'a', 'b', 'c']

索引与切片(和字符串类似)

my_list = [1, 2, 3, 4, 5]
print(my_list[0])    # 1
print(my_list[:4])   # [1, 2, 3, 4]
print(my_list[4:])   # [5]

列表嵌套取值

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix[1][1])   # 5(第二个列表的第二个元素)

六、列表常用操作(增删改查)

添加元素

# append():末尾添加
my_list = [1, 2, 3]
my_list.append(4)
print(my_list)   # [1, 2, 3, 4]

# insert(位置, 元素):指定位置插入
my_list.insert(1, 10)
print(my_list)   # [1, 10, 2, 3, 4]

删除元素

# remove(值):删除第一个匹配的元素
my_list = [1, 2, 3, 2, 4]
my_list.remove(2)
print(my_list)   # [1, 3, 2, 4]

# del 列表[下标]:删除指定位置
my_list = [1, 2, 3, 4]
del my_list[1]
print(my_list)   # [1, 3, 4]

查找元素

my_list = [1, 2, 3, 4, 5]
#查找对应值的位置
print(my_list.index(3))   # 2

my_list = [1, 2, 3, 2, 4, 2]
print(my_list.count(2))   # 3
#查看对应值的重复次数

修改元素

my_list = ['chinese', 'english', 'physics']
my_list[1] = 'math'
print(my_list)   # ['chinese', 'math', 'physics']

其他常用操作

# 获取长度
my_list = [1, 2, 3, 4, 5]
print(len(my_list))   # 5

# 排序(原地修改)
my_list = [5, 2, 9, 1, 5, 6]
my_list.sort()                # 升序
print(my_list)   # [1, 2, 5, 5, 6, 9]
my_list.sort(reverse=True)    # 降序
print(my_list)   # [9, 6, 5, 5, 2, 1]

综合练习:购物车操作

# 1. 创建购物车列表
cart = ['apple', 'banana', 'orange']

# 2. 添加 grapes
cart.append('grapes')
print(cart)   # ['apple', 'banana', 'orange', 'grapes']

# 3. 删除 apple
cart.remove('apple')
print(cart)   # ['banana', 'orange', 'grapes']

# 4. 查找 banana 的索引
idx = cart.index('banana')
print(idx)   # 0

# 5. 修改 banana 为 pear
cart[0] = 'pear'
print(cart)   # ['pear', 'orange', 'grapes']

作业(请先独立完成,再对照答案)

一、单选题

1.已知 s = "hello world",执行 print(s[5]) 输出结果是( )

  • A. 'o'
  • B. ' '(空格)
  • C. 'w'
  • D. 报错

2.字符串切片的“包前不包后”规则是指( )

  • A. 包含起始下标,包含结束下标
  • B. 不包含起始下标,包含结束下标
  • C. 包含起始下标,不包含结束下标
  • D. 不包含起始下标,不包含结束下标

3.已知 str1 = "python",执行 print(str1[2:5]) 输出结果是( )

  • A. 'tho'
  • B. 'th'
  • C. 'pyt'
  • D. 'thon'

4.已知 str2 = "abcdefg",执行 print(str2[::-1]) 输出结果是( )

  • A. 'abcdefg'
  • B. 'gfedcba'
  • C. 'aceg'
  • D. 'bdf'

5.下列代码中,能截取字符串 url = "https://www.taobao.com"taobao 的是( )

  • A. url[12:18]
  • B. url[12:17]
  • C. url[11:17]
  • D. url[11:18]

6.已知 str3 = "123456789",执行 print(str3[1:8:3]) 输出结果是( )

  • A. '2468'
  • B. '258'
  • C. '369'
  • D. '147'

7.执行 l1 = ["x", "y", "z"]; print("+".join(l1)) 输出结果是( )

  • A. 'xyz'
  • B. 'x+y+z'
  • C. 'x,y,z'
  • D. ['x', '+', 'y', '+', 'z']

8.已知 str4 = "hello maiya",执行 print(str4.find("maiya")) 输出结果是( )

  • A. 5
  • B. 6
  • C. 7
  • D. -1

二、操作题

已知字符串 name = "ZhangSan",请通过下标和切片完成以下操作:

  • 提取首字符 'Z'
  • 提取最后一个字符 'n'
  • 截取前3个字符 'Zha'
  • 截取后3个字符 'San'

已知字符串 phone = "138-1234-5678",请通过字符串操作去掉其中的 -,最终输出 13812345678

已知字符串 info = " 我今年25岁,月薪8000元 ",请完成以下操作:

  • 去除字符串首尾的空格
  • 提取其中的年龄数字 25 和月薪数字 8000(仅需提取数字部分,无需转换类型)

作业答案

单选题答案

题号答案解析
1Bs[5] 对应第6个字符,"hello world" 中下标5是空格(h e l l o 空格 w...
2C切片规则:[start:stop] 包含 start,不包含 stop
3A"python"[2:5] → 下标2~4:'t', 'h', 'o'"tho"
4B[::-1] 反转字符串:"gfedcba"
5D"https://www.taobao.com"t 下标11,o 下标17(需包含),所以 [11:18]
6B"123456789"[1:8:3] → 下标1,4,7 → '2','5','8'"258"
7B"+".join(l1)"+" 连接列表元素 → "x+y+z"
8B"hello maiya""maiya" 首字母 m 下标6

操作题答案

1. 字符串切片提取

name = "ZhangSan"
first_char = name[0]          # 'Z'
last_char = name[-1]          # 'n'
first_three = name[:3]        # 'Zha'
last_three = name[-3:]        # 'San'

2. 去掉连字符

phone = "138-1234-5678"
result = phone.replace("-", "")
print(result)   # 13812345678

# 或使用 split + join
result = "".join(phone.split("-"))

3. 去除空格并提取数字

info = "  我今年25岁,月薪8000元  "
# 去除首尾空格
info_clean = info.strip()

# 方法1:直接切片(已知位置)
age = info_clean[3:5]      # "25"
salary = info_clean[9:13]  # "8000"

# 方法2:遍历提取所有数字(通用)
age = ""
salary = ""
found_age = False
for ch in info_clean:
    if ch.isdigit():
        if not found_age:
            age += ch
        else:
            salary += ch
    else:
        if age and not found_age:
            found_age = True

print(age, salary)   # 25 8000

总结

本篇笔记涵盖了字符串和列表的核心知识:

  • 字符串:不可变序列,支持下标(正/负)、切片(包前不包后)、常用方法(findreplacesplitisalphaisdigit 等)。
  • 列表:可变序列,支持增删改查(appendinsertremovedelindexcountsort 等)。

字符串和列表是 Python 编程中使用频率最高的两种数据结构,务必多加练习。熟练掌握它们,你就能轻松处理大部分文本和集合数据。

以上就是一篇搞懂Python中字符串和列表的基本操作(新手必看)的详细内容,更多关于Python字符串和列表操作的资料请关注脚本之家其它相关文章!

相关文章

  • python用Joypy绘制嵴线图实例

    python用Joypy绘制嵴线图实例

    大家好,本篇文章主要讲的是python Joypy绘制嵴线图实例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Python遇到UnicodeEncodeError错误的解决方案

    Python遇到UnicodeEncodeError错误的解决方案

    在使用Python处理从不同网页抓取的文本时,经常会遇到UnicodeEncodeError错误,这通常是因为Python默认使用ASCII编码,而当遇到超出ASCII编码范围(0 - 127)的字符时,就会抛出该错误,所以本文给大家介绍了一些Python遇到UnicodeEncodeError错误的解决方案
    2025-06-06
  • Python OpenCV实现视频分帧

    Python OpenCV实现视频分帧

    这篇文章主要为大家详细介绍了Python OpenCV实现视频分帧,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • python Pydub简单易用的音频处理库使用实例探索

    python Pydub简单易用的音频处理库使用实例探索

    Pydub是一个简单易用的Python库,它让音频处理变得像处理列表或字符串一样简单,你可以用Pydub来剪辑、合并、调整音频文件,以及执行许多其他的音频处理任务,它支持多种音频格式,包括常见的MP3、WAV和AAC
    2024-01-01
  • Pytorch GPU内存占用很高,但是利用率很低如何解决

    Pytorch GPU内存占用很高,但是利用率很低如何解决

    这篇文章主要介绍了Pytorch GPU内存占用很高,但是利用率很低的原因及解决方法,具有很好的参考价值,希望对大家 有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 浅谈python3发送post请求参数为空的情况

    浅谈python3发送post请求参数为空的情况

    今天小编就为大家分享一篇浅谈python3发送post请求参数为空的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • PyChar学习教程之自定义文件与代码模板详解

    PyChar学习教程之自定义文件与代码模板详解

    pycharm默认的【新建】文件,格式很不友好,那么就需要改一下文件模板。下面这篇文章主要给大家介绍了关于PyChar学习教程之自定义文件与代码模板的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面跟着小编来一起看看吧。
    2017-07-07
  • python实现读取大文件并逐行写入另外一个文件

    python实现读取大文件并逐行写入另外一个文件

    下面小编就为大家分享一篇python实现读取大文件并逐行写入另外一个文件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python对DataFrame中所有行数据进行比较的几种方法

    Python对DataFrame中所有行数据进行比较的几种方法

    在数据分析中,比较DataFrame数据框中的行是一项基本操作,可应用于多种场景,在本文中,我们将学习各种方法,将DataFrame中的行与每一行进行比较,直到所有行都被比较完,结果存储在一个列表中,需要的朋友可以参考下
    2024-12-12
  • 浅谈python元素如何去重,去重后如何保持原来元素的顺序不变

    浅谈python元素如何去重,去重后如何保持原来元素的顺序不变

    这篇文章主要介绍了浅谈python元素如何去重,去重后如何保持原来元素的顺序不变?具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02

最新评论