有哪些数据容器?
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提供了许多内置方法来操作和处理字符串。以下是一些常用的字符串方法:
示例代码如下:
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!
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!
在处理字符串时,有一些注意事项需要牢记:
总结起来,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'],)
终于搞定了,但是我觉得最后一小题做的并不好。
如果有大佬愿意伸出圆手,希望评论区帮忙修改完善。