【字符串】给定一个字符串 text 和字符串列表 words,返回 words 中每个单词在 text 中的位置(要求最终的位置从小到大进行排序)

python 复制代码
# 给定一个字符串 text 返回 words 中每个单词在 text 中的位置
#(要求最终的位置从小到大进行排序)


text = input("请输入text的内容:")

words = input("请输入words的内容:")

words = words.split()

    

result = []

for each in words:

    temp = text.find(each)

    while temp != -1:

        result.append([temp,temp+len(each)-1])

        temp = text.find(each, temp+1)

    

print(sorted(result))
        

以下是代码的详细解析------------

这段代码的目的是在给定的文本 `text` 中查找一系列单词 `words` 的出现位置,并返回这些位置的列表。接下来,我将逐步分析代码的每一部分。

第 1 部分:输入

```python

text = input("请输入text的内容:")

words = input("请输入words的内容:")

```

  • `input()` 函数用于从用户那里获取输入数据。

  • `text` 是用户输入的文本字符串。

  • `words` 是用户输入的单词列表,但最初它是一个由空格分隔的字符串。

第 2 部分:将 `words` 转换为单词列表

```python

words = words.split()

```

  • `split()` 方法将 `words` 字符串按空格分割成一个列表。

  • 假设用户输入的 `words` 是像 "apple banana cherry" 这样的字符串,`split()` 方法会将其转换为 `['apple', 'banana', 'cherry']` 的列表。

第 3 部分:初始化结果列表

```python

result = []

```

  • `result` 是一个空列表,用来存储找到的每个单词的位置。

第 4 部分:遍历 `words` 中的每个单词

```python

for each in words:

```

  • 这个 `for` 循环会遍历 `words` 列表中的每个单词。假设 `words = ['apple', 'banana', 'cherry']`,这个循环会分别处理 `'apple'`, `'banana'`, `'cherry'` 这三个单词。

第 5 部分:查找每个单词的位置

```python

temp = text.find(each)

```

  • `text.find(each)` 用来查找 `each`(当前单词)在 `text`(文本)中第一次出现的位置。

  • `find()` 方法返回单词第一次出现的起始位置,如果找不到该单词,则返回 `-1`。

第 6 部分:使用 `while` 循环查找所有出现位置

```python

while temp != -1:

```

  • 这是一个 `while` 循环,它会在 `temp` 不等于 `-1` 时持续执行,即直到没有找到该单词为止。

  • 每次找到一个单词后,`temp` 会更新为该单词下一个可能出现的位置。

第 7 部分:记录单词的位置

```python

result.append([temp, temp + len(each) - 1])

```

  • 每次找到单词,都会将该单词的起始位置 `temp` 和结束位置 `temp + len(each) - 1`(即单词的最后一个字符的位置)作为一个列表 `([temp, temp + len(each) - 1])` 添加到 `result` 列表中。

  • 比如,如果 `each` 是 `"apple"`,且 `temp` 是 5,那么 `temp + len(each) - 1` 就是 9,表示 `"apple"` 从索引 5 到 9 出现。

第 8 部分:更新 `temp` 查找下一个位置

```python

temp = text.find(each, temp + 1)

```

  • `find(each, temp + 1)` 会继续从当前位置 `temp + 1` 开始,查找下一个 `each` 单词出现的位置。

  • 如果找到了下一个位置,`temp` 会更新为新的起始位置;如果没有找到,`temp` 会变成 `-1`,`while` 循环就会终止。

第 9 部分:输出结果

```python

print(sorted(result))

```

  • 最后,通过 `sorted(result)` 对 `result` 列表进行排序,并输出排序后的结果。

  • `sorted(result)` 会返回按起始位置从小到大排列的子列表。例如,`result` 列表中的每个元素是一个 `[start, end]` 形式的子列表,`sorted(result)` 会按 `start` 位置升序排序。

代码中的问题:

  • **缺少括号**:在 `print(sorted(result)` 中,缺少一个右括号,应为 `print(sorted(result))`。

总结:

  1. 用户输入一个文本 `text` 和一个单词列表 `words`(多个单词通过空格分隔)。

  2. 程序查找每个单词在文本中出现的位置(包括所有出现的位置)。

  3. 每个单词的位置通过起始位置和结束位置表示,并存入 `result` 列表。

  4. 最终输出按位置排序的结果。

相关推荐
fcopy8 分钟前
Golang云原生项目:—实现ping操作
开发语言·golang
Clown9512 分钟前
go-zero(二) api语法和goctl应用
开发语言·后端·golang
Python私教12 分钟前
go语言中的占位符有哪些
开发语言·后端·golang
蒙娜丽宁14 分钟前
【人工智能】从零开始用Python实现逻辑回归模型:深入理解逻辑回归的原理与应用
人工智能·python·逻辑回归
wh柒八九42 分钟前
使用win32com将ppt(x)文件转换为pdf文件
python·flask
007php00744 分钟前
使用 Go 实现将任何网页转化为 PDF
开发语言·后端·python·docker·chatgpt·golang·pdf
阿华的代码王国1 小时前
【Bug合集】——Java大小写引起传参失败,获取值为null的解决方案
java·开发语言·springboot
阑梦清川1 小时前
概率论之常见分布与matlab绘图
开发语言·matlab·概率论
hong1616881 小时前
CentOS中的Firewalld:全面介绍与实战应用
linux·python·centos
Atlasgorov1 小时前
JAVA_单例模式
java·开发语言·单例模式