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

相关推荐
“AI国潮设计-小江”1 小时前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
程序喵大人2 小时前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型
wenwen_chao2 小时前
Python学习与开发资源合集:实用技巧与工具推荐
python
for_ever_love__3 小时前
函数——参数、lambda、*args与作用域
python·函数·大模型开发·编程基础
东莞市云毅网络有限公司3 小时前
企业资料时效性判定:Last-Modified、正文日期与版本字段三路交叉
python·sqlite·自动化运维·geo·数据监测
Query*3 小时前
深入浅出LangGraph【一】_基础篇
python·ai·langchain
sunshine22 girl3 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
XiaoMaqqqq3 小时前
市面上正规的IP驱动产业新场景新工具哪家强
运维·python·网络协议·tcp/ip
菜鸟~noob2334 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
ShyanZh4 小时前
【Python3基础】19-Socket 与 TCP、UDP 编程
python·网络协议·tcp/ip·udp