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

相关推荐
z落落2 小时前
C# 泛型方法(原理、类型推断、多泛型参数)+泛型效率(普通类型 VS Object装箱 VS 泛型)
开发语言·c#
L_09072 小时前
【C++】异常
开发语言·c++
世辰辰辰3 小时前
批量修改图片/文本名子
开发语言·python·批量修改文件名
啦啦啦啦啦zzzz4 小时前
数据结构:红黑树理论
数据结构·c++·红黑树
myenjoy_14 小时前
MQTT 与 Sparkplug B——从车间到云端的最后一公里
网络·python
z落落4 小时前
C# 四种特殊类:抽象类、密封类、静态类、部分类
开发语言·c#
VidDown5 小时前
Webhook 调试器:让第三方回调“原形毕露”
java·开发语言·javascript·编辑器·postman
San813_LDD5 小时前
[数据结构]LeetCode学习
数据结构·算法·图论
装不满的克莱因瓶5 小时前
基于 OpenResty 扩展开发实现动态服务注册与发现能力
java·开发语言·架构·openresty
颜酱5 小时前
LangChain 输出解析器:把模型回复变成你要的数据
python·langchain