如何获取在字符串中多次出现的单词的多个索引? [复制]

Posted

技术标签:

【中文标题】如何获取在字符串中多次出现的单词的多个索引? [复制]【英文标题】:How to get multipleindices of a word which is occurring more than once in a string? [duplicate] 【发布时间】:2020-04-30 10:20:08 【问题描述】:

考虑一下,

text = 'lmn pqr xyz abc def pqr abc'

我需要从字符串str 中获取单词abc 出现的两个索引。

我试过text.split().index('abc'),得到的输出是3

我需要36 作为输出。

【问题讨论】:

这能回答你的问题吗? How to find all occurrences of an element in a list? 【参考方案1】:
str = "lmn pqr xyz abc def pqr abc"
indices = [i for i, element in enumerate(str.split()) if element=="abc"]
print(indices)

输出

[3, 6]

首先拆分字符串并使其成为str.split() 的列表,然后它变为['lmn', 'pqr', 'xyz', 'abc', 'def', 'pqr', 'abc']。然后取分割后的str的每个元素及其索引位置,我们这里用for循环枚举。如果任何项目与“abc”匹配,则其索引位置将附加到索引列表中。 如果您想知道 str 中“abc”的总出现次数,请使用len(indices)

为了更好地理解,我在不使用列表理解的情况下编写上述代码:

str = "lmn pqr xyz abc def pqr abc"

indices = []
for i, element in enumerate(str.split()):
    if element=="abc":
        indices.append(i)
print(f"The index position of 'abc' are indices")

同样,如果你想找到所有项目的索引位置,那么试试这个:

str = "lmn pqr xyz abc def pqr abc"
deduped_str = set(str.split())
result = dict()
for item in deduped_str:
    indices = [i for i, element in enumerate(str.split()) if element==item]
    result[item] = indices
print(result)

【讨论】:

【参考方案2】:

不要分配给str,因为它是一种类型。

这应该做你想做的事

>>> text = 'lmn pqr xyz abc def pqr abc'
>>> print([n for (n, e) in enumerate(text.split()) if e == 'abc'])
[3, 6]

【讨论】:

感谢回复,但是print语句好像有语法错误。 正如您使用 Python 3.x 标记的那样,这是该版本 python 的语法。对于旧版本,请使用 print [n for (n, e) in enumerate(text.split()) if e == 'abc']

以上是关于如何获取在字符串中多次出现的单词的多个索引? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何查找字符串中所有出现的单词的所有索引[重复]

在多行字符串中获取单词'print'的索引

如何在正则表达式中匹配多个单词

C# 正则表达式匹配具有分隔符的字符串

Java如何找到一个单词的每一次匹配?

使用二进制搜索的多个键的最后索引?