【大数据 / Python / KEN】Python 下标、切片、字符串常见操作(6)

下标、切片、字符串常见操作

首次发布时间:2020/7/28
最后修改时间:2020/7/28
本系列文章基于 python3 版本

摘要
  • 下标、切片
  • 字符串常见操作
    • find()
    • index()
    • count()
    • replace()
    • split()
    • strip()

下标、切片


书架上有 6 本书,从左到右放好,书名分别是:【西西弗神话,维特根斯坦传,苏菲的世界,西方哲学史讲演录,查拉图斯特拉如是说,哲学的故事】
给书编好号,从左到右分别是:【1,2,3,4,5,6】

下标
  • 上面所说的书的编号,在程序中就是所谓的下标
  • 但是一般来说,在程序中,下标都是从 0 开始的
    • 所以对于程序来讲,书的编号应该改为:【0,1,2,3,4,5】
  • 示意图:
书名西西弗神话维特根斯坦传苏菲的世界西方哲学史讲演录查拉图斯特拉如是说哲学的故事
下标012345
  • 我们可以从第一本书开始看起
  • 也可以随便拿其中一本来看
  • 那这个过程用程序如何模拟呢?
str_list = ["西西弗神话", "维特根斯坦传", "苏菲的世界", "西方哲学史讲演录", "查拉图斯特拉如是说", "哲学的故事"]

print("读一下 《" + str_list[2] + "》")
  • 输出结果:
读一下 《苏菲的世界》

所以说,程序中的下标对应着相应的书
再次注意下:
在程序中,下标是从 0 开始的
比如要拿《西西弗神话》,则要用 str_list[0]
这是初学者容易犯错的地方,熟悉了就好了

切片
  • 如果你想拿其中的第 2、3 本书,程序应该怎么实现?
str_list = ["西西弗神话", "维特根斯坦传", "苏菲的世界", "西方哲学史讲演录", "查拉图斯特拉如是说", "哲学的故事"]

print(str_list[1:3:1])
  • 输出结果:
['维特根斯坦传', '苏菲的世界']
  • 切片的语法:[起始:结束:步长]

    • 起始:开始的位置(下标
      • 上面的例子中,起始是 1,这里说的是下标
      • 所以第一个取的是 《维特根斯坦传》,因为它的下标就是 1
    • 结束想取的最后一个元素序号
      • 注意,这里是说序号不是下标,序号是 3,上面的例子中对应的就是 《苏菲的世界》
    • 步长:取元素时隔几个取
      • 比如步长是 1 的时候,就取完一个元素,再继续取紧接着它的下一个元素(像上面的例子)
      • 如果步长是 2 的时候,就取完一个元素,然后隔一个元素再取(比如我第一个取的是**《西西弗神话》,下一个取的是《苏菲的世界》**)
      • 其它步长值如此类推
  • 使用示例:

str_list = ["西西弗神话", "维特根斯坦传", "苏菲的世界", "西方哲学史讲演录", "查拉图斯特拉如是说", "哲学的故事"]

print(str_list[0:4:])

print(str_list[0:5:])

print(str_list[0:5:1])

print(str_list[0:5:2])

print(str_list[0:5:3])
  • 输出结果:
['西西弗神话', '维特根斯坦传', '苏菲的世界', '西方哲学史讲演录']
['西西弗神话', '维特根斯坦传', '苏菲的世界', '西方哲学史讲演录', '查拉图斯特拉如是说']
['西西弗神话', '维特根斯坦传', '苏菲的世界', '西方哲学史讲演录', '查拉图斯特拉如是说']
['西西弗神话', '苏菲的世界', '查拉图斯特拉如是说']
['西西弗神话', '西方哲学史讲演录']

从输出结果看,当不填入步长时,其实默认的步长是 1

如果想从后往前拿书:
str_list = ["西西弗神话", "维特根斯坦传", "苏菲的世界", "西方哲学史讲演录", "查拉图斯特拉如是说", "哲学的故事"]

print(str_list[::-1])

print(str_list[-1:-3:-1])
  • 输出结果:
['哲学的故事', '查拉图斯特拉如是说', '西方哲学史讲演录', '苏菲的世界', '维特根斯坦传', '西西弗神话']
['哲学的故事', '查拉图斯特拉如是说']

str_list[-1:-3:-1] 需要特别解释一下:

  • 最后的步长 -1,就是表示从后往前取元素。
  • 在步长是 -1 的情况下,-1 表示从后往前第一个元素的下标
    • 所以起始-1 表示 《哲学的故事》-2 表示 《查拉图斯特拉如是说》,依此类推。
  • 结束-3,实际输出到《查拉图斯特拉如是说》结束了,而《查拉图斯特拉如是说》的下标是 -2
    • 所以我们可以理解为 结束 处的值是最后输出元素下一个
  • 代码示例:
str_list = ["西西弗神话", "维特根斯坦传", "苏菲的世界", "西方哲学史讲演录", "查拉图斯特拉如是说", "哲学的故事"]

print(str_list[0:2])  # 取出下标是 0、1 的书

print(str_list[0:4])  # 取出线标为 0~3 的书

print(str_list[1:])  # 取出下标为 1 及其之后的书

# 取出下标为 1 的书到最后一本书之间的书(包括下标为 1 的书,不包括最后一本书)
print(str_list[1:-1])  

# 从后向前拿书
print(str_list[::-1])

# 取最后一本书
print(str_list[-1:])
  • 输出结果:
['西西弗神话', '维特根斯坦传']
['西西弗神话', '维特根斯坦传', '苏菲的世界', '西方哲学史讲演录']
['维特根斯坦传', '苏菲的世界', '西方哲学史讲演录', '查拉图斯特拉如是说', '哲学的故事']
['维特根斯坦传', '苏菲的世界', '西方哲学史讲演录', '查拉图斯特拉如是说']
['哲学的故事', '查拉图斯特拉如是说', '西方哲学史讲演录', '苏菲的世界', '维特根斯坦传', '西西弗神话']
['哲学的故事']
思考
  • 怎么取出 [‘西方哲学史讲演录’, ‘苏菲的世界’, ‘维特根斯坦传’] 呢?
str_list = ["西西弗神话", "维特根斯坦传", "苏菲的世界", "西方哲学史讲演录", "查拉图斯特拉如是说", "哲学的故事"]

print(str_list[-3:-6:-1])
  • 输出结果:
['西方哲学史讲演录', '苏菲的世界', '维特根斯坦传']

字符串常见操作


find
  • 有时一串字符串比较长,需要从中找出某一段内容的位置
  • 这时候就需要用到 find 函数
  • 假设有一个字符串:sentence = "But it’s time to face the truth. I will never be with you"
sentence = "But it's time to face the truth. I will never be with you"

print(sentence.find('truth'))

print(sentence.find('truth', 28, len(sentence)))
  • 输出结果:
26
-1
  • 为什么一个是 26,一个是 -1
    • find() 函数是在 sentence 中查找 “truth” 字段
      • 能找到就返回第一个字符索引值(这里的例子就是返回第一个 “t” 的索引值 26,即下标),否则返回 -1
    • 例子中第一个 find 是在整个字符串中找,所以能找到,并返回相应的索引值
    • 例子中第二个 find 是从字符串下标28 的地方开始找到结尾处,所以找不到 “truth” 字段,所以返回了 -1
index
  • find() 的作用一样,但如果找不到字符串会报错
sentence = "But it's time to face the truth. I will never be with you"

print(sentence.index('truth'))

print(sentence.index('truth', 28, len(sentence)))
  • 输出结果:
26
Traceback (most recent call last):
  File "test.py", line 5, in <module>
    print(sentence.index('truth', 28, len(sentence)))
ValueError: substring not found
count
  • 统计指定字符/字符串出现的次数
sentence = "But it's time to face the truth. I will never be with you"

print(sentence.count('t'))
  • 输出结果:
8
replace【替换】
  • 格式:

字符串.replace(要替换的字符,用哪个字符替换,替换不超过多少次【<=】)

sentence = "But it's time to face the truth. I will never be with you"

print(sentence.replace('t', 'T', 4))
  • 输出结果:
BuT iT's Time To face the truth. I will never be with you
  • 结果就是,前四个 ‘t’,被替换为了 'T’
split【切片】
  • 格式:

split(“切割符”,[次数]) # [] 为可选参数
返回一个列表

sentence = "But it's time to face the truth. I will never be with you"

print(sentence.split(' '))  # 默认切割整个句子

print(sentence.split(' ', 2))  # 最多切割 2 次

print(sentence.split())  # 默认按 空格、'\t'、'\n' 切割
  • 输出结果:
['But', "it's", 'time', 'to', 'face', 'the', 'truth.', 'I', 'will', 'never', 'be', 'with', 'you']
['But', "it's", 'time to face the truth. I will never be with you']
['But', "it's", 'time', 'to', 'face', 'the', 'truth.', 'I', 'will', 'never', 'be', 'with', 'you']
strip【删除字符串两端的空白字符】
  • 格式:

word.strip([chars])
chars – 移除字符串头尾指定的字符序列

sentence = "   But it's time to face the truth. I will never be with you   "

print(sentence.strip(" "))

print(sentence.strip())  # 默认移除 空格、'\t'、'\n'
  • 输出结果:
But it's time to face the truth. I will never be with you
But it's time to face the truth. I will never be with you
  • 还有将近 20 个函数没有列出,因为不太常用

思考


  • 给定一个字符串,a = “abcdefg \t hijklmn \t opqrst uvwxyz”
  • 打印用 ‘\t’ 或者 空格 分隔的倒数第二个字符串
a = "abcdefg \t hijklmn \t opqrst uvwxyz"

b = a.split()  # 以空格为分隔符,包括 '\t'

print(b)

print(b[-2:-3:-1])
  • 输出结果:
['abcdefg', 'hijklmn', 'opqrst', 'uvwxyz']
['opqrst']

当 split() 没加任何参数时,默认是以 空格’\t’’\n’ 做分隔符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值