Python基础(十二、数据容器之字符串)


什么是数据容器?
数据容器是Python中用于存储和操作数据的对象。它们可以容纳不同类型的数据,如数字、字符串、列表、字典等,并提供了各种方法来访问和操作这些数据。

有哪些数据容器?
Python提供了几种常见的数据容器,包括列表(List)、元组(Tuple)、字典(Dictionary)和集合(Set)。他们都能满足容纳多个元素的特点。
每种容器都有其独特的特点和用途,我们将逐一探索它们。

字符串
Python中的字符串是一种重要的数据类型,用于表示文本数据。字符串在Python中是不可变的,这意味着一旦创建就不能修改。

一、什么是字符串

在Python中,字符串是由字符组成的序列,可以是字母、数字、符号或其他任意字符。字符串在引号(单引号或双引号)中定义,例如:

message = 'Hello, World!'

字符串可以包含任意长度的字符集合,并且可以进行各种操作和处理。

二、操作方式

Python提供了许多操作字符串的方式。下面是一些常见的操作方式:

  • 字符串访问:通过索引访问字符串中的单个字符。例如,char = message[0] 会获取字符串 message 中的第一个字符。索引从0开始,负数索引表示从字符串末尾开始计数。

  • 字符串切片:使用切片操作可以获取字符串的子字符串。例如,substring = message[7:12] 将获取从索引7到索引12之间的子字符串。切片包含起始索引位置,但不包含结束索引位置。

  • 字符串拼接:使用加号(+)可以将两个字符串连接起来。例如,new_message = message + ’ Have a nice day!’ 可以将字符串 message 和另一个字符串连接起来。

  • 字符串重复:使用乘号(*)可以将字符串重复多次。例如,repeated_message = message * 3 将字符串 message 重复三次。

三、常用方法

Python提供了许多内置方法来操作和处理字符串。以下是一些常用的字符串方法:

  • len(): 获取字符串的长度。
  • lower(): 将字符串转换为小写。
  • upper(): 将字符串转换为大写。
  • strip(): 去除字符串两端的空白字符。
  • find(substring): 在字符串中查找子字符串,并返回第一次出现的索引位置。
  • replace(old, new): 将字符串中的旧子字符串替换为新的子字符串。
  • split(separator): 将字符串按照指定的分隔符拆分成列表。
  • join(iterable): 将列表中的字符串连接成一个新的字符串。

示例代码如下:

message = 'Hello, World!'
print(len(message))  # 输出:13
print(message.lower())  # 输出:hello, world!
print(message.upper())  # 输出:HELLO, WORLD!
print(message.strip())  # 输出:Hello, World!(去掉首尾空格)
print(message.find('World'))  # 输出:7
new_message = message.replace('World', 'Python')
print(new_message)  # 输出:Hello, Python!
words = message.split(',')  # 将字符串按逗号拆分成列表
print(words)  # 输出:['Hello', ' World!']
new_message = ' '.join(words)  # 将列表中的字符串用空格连接成新的字符串
print(new_message)  # 输出:Hello World!
  • strip():有参的时候很特别。
    举个例子:
temp = "a31adpi13a4dsbadpbaaaa31"
selfaa = "1b3a"
print(temp.strip(selfaa))

输出:

dpi13a4dsbadp

这里学习的是很疑惑,觉得strip的参数是一个整体,替换的时候应该是整体匹配替换掉。但是实践才发现参数是多个字符,逐个字符匹配。这里我查了源码,看了源码之后清晰易懂。

def mystrip(t,c=' \t\n'):
    #c是要剔除的字符,默认参数是空格,回车换行符\n和制表符\t
	s1,s2=0,-1
	while True:
		if t[s1] in c and t[s1+1] in c: #若相邻两个字符都在列表c内,则指针值自增1
			s1+=1
		else:
			break
	while True:
		if t[s2] in c and t[s2-1] in c: #若相邻两个字符都在列表c内,则指针值自减1
			s2-=1
		else:
			break
	return t[s1+1:s2]

s=' hello world!   '
res=mystrip(s)
print(res)


函数打印输出:hello world!

四、注意事项

在处理字符串时,有一些注意事项需要牢记:

  • 字符串是不可变的,即不能直接修改字符串的某个字符。如果需要修改字符串,可以通过创建新的字符串来完成。
  • 字符串的索引从0开始,负数索引表示从字符串末尾开始计数。
  • 在进行字符串拼接时,要确保拼接的两个对象都是字符串类型。如果其中一个是整数或其他类型的对象,需要先将其转换为字符串。
  • 在使用字符串的方法时,要确保字符串对象存在,否则会引发错误。可以使用条件语句或其他方式进行检查。
  • 在编写和处理字符串时,遵循这些注意事项将帮助您避免常见的错误和问题。

总结起来,Python的字符串提供了丰富的操作和处理方式,使得处理文本数据变得简单而高效。掌握字符串的基本概念、操作方式、常用方法以及注意事项,将有助于您更好地理解和应用字符串。

上节答案

请结合之前学的遍历列表,完成遍历元组的小题目吧~

假设你是一家水果批发商,你手上有以下水果库存的元组数据:

fruits = ('apple', 'banana', 'orange', 'grape', 'pineapple')

请你完成以下任务:

遍历输出所有水果的名称。
遍历输出每种水果的索引及名称,格式如下:“1: apple”。
将每种水果的名称以及对应的长度(字符数)存储在一个新的元组中,并输出这个新元组。

我的答案和遇到的问题

fruits = ('apple', 'banana', 'orange', 'grape', 'pineapple')
for fru in fruits:
    # 遍历输出所有水果的名称。
    print(fru)
for i in len(fruits):
    # 遍历输出每种水果的索引及名称,格式如下:“1: apple”。
    print(f"{i}:{fruits[i]}")

输出:

Traceback (most recent call last):
  File "D:\jushu\demo\answer.py", line 5, in <module>
    for i in len(fruits):
TypeError: 'int' object is not iterable
apple
banana
orange
grape
pineapple

看到这里第5行报错了,‘int’ object is not iterable,是说int不能被直接遍历。忽然想起来得用range,修改代码,解决。

fruits = ('apple', 'banana', 'orange', 'grape', 'pineapple')
for fru in fruits:
    # 遍历输出所有水果的名称。
    print(fru)
for i in range(len(fruits)):
    # 遍历输出每种水果的索引及名称,格式如下:“1: apple”。
    print(f"{i}:{fruits[i]}")
fruits_list = []
new_fruits = (fruits_list)
for i in range(len(fruits)):
    # 将每种水果的名称以及对应的长度(字符数)存储在一个新的元组中,并输出这个新元组。
    frulen = len(fruits[i])
    fruits_list.append(f"{frulen},{fruits[i]}")
print(new_fruits)

输出:

apple
banana
orange
grape
pineapple
0:apple
1:banana
2:orange
3:grape
4:pineapple
['5,apple', '6,banana', '6,orange', '5,grape', '9,pineapple']

这里细心的小伙伴又会发现问题,最后输出的怎么没有(),是个列表吧。
好吧,当定义单个元组的时候,需要在元素后面加逗号。我没加才会出现这样的问题的。
改!!

fruits = ('apple', 'banana', 'orange', 'grape', 'pineapple')
for fru in fruits:
    # 遍历输出所有水果的名称。
    print(fru)
for i in range(len(fruits)):
    # 遍历输出每种水果的索引及名称,格式如下:“1: apple”。
    print(f"{i}:{fruits[i]}")
fruits_list = []
new_fruits = (fruits_list,)
for i in range(len(fruits)):
    # 将每种水果的名称以及对应的长度(字符数)存储在一个新的元组中,并输出这个新元组。
    frulen = len(fruits[i])
    fruits_list.append(f"{frulen},{fruits[i]}")
print(new_fruits)

输出:

apple
banana
orange
grape
pineapple
0:apple
1:banana
2:orange
3:grape
4:pineapple
(['5,apple', '6,banana', '6,orange', '5,grape', '9,pineapple'],)

终于搞定了,但是我觉得最后一小题做的并不好。
如果有大佬愿意伸出圆手,希望评论区帮忙修改完善。

  • 41
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈年小趴菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值