【字符串】给定一个字符串 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. 最终输出按位置排序的结果。

相关推荐
心中有国也有家2 小时前
GE图引擎深度解析——CANN的计算图优化与执行引擎
人工智能·pytorch·python·学习·numpy
卷毛的技术笔记3 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
编程大师哥3 小时前
匿名函数 lambda + 高阶函数
java·python·算法
isyangli_blog3 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008113 小时前
FastAPI APIRouter
开发语言·python
Benszen3 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆3 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木3 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
adrninistrat0r3 小时前
Java调用链MCP分析工具
java·python·ai编程
也曾看到过繁星4 小时前
数据结构---顺序表
数据结构