如何打印可能包含重复项的字符串中单个单词的索引?

时间:2016-11-05 00:28:04

标签: python-3.x

在我的代码中,我希望从用户那里获取一串文本并将其分成单个单词,然后获取这些单词的索引。我这样做但是我遇到了两个问题。首先,我需要将索引显示在单词旁边(例如:"分析:[5]")。在我的代码中,索引在单词之前打印。第二个问题是,如果字符串中有重复的单词,我的代码将返回第一个副本的索引。此外,如果有单词的重复,我试图显示单词出现的所有索引(例如:":[4,6,8]"。 PS我将.sort方法注释掉了,因为我要按字母顺序排列所有索引的单词。 感谢。

import string

def main():
    print('Please enter some text to index')
    user_input=input()
    buildIndex(user_input)

def buildIndex(text):

    words=text.split()
    index=[]
    for x in range(len(words)):
        lower=str.lower(words[x])
        index.append(lower)
        #index.sort()
        index_position=index.index(lower)
        print(index_position)
    print('\n'.join(index))


main()

1 个答案:

答案 0 :(得分:1)

索引在单词之前打印,因为这就是代码的作用。对print的第一次调用是在循环内部,因此每次循环执行一次。第二个(打印单词)在循环之后,所以当它们打印时。

您希望将字符串映射到您在其中看到的位置,而不是制作字符串列表;在python中,你想使用dict(也写成{})。

由于您不使用string模块中的任何内容,因此此代码不需要此行:

import string

创建将键映射到值列表的dict的基本技术如下所示:

d.setdefault(key, []).append(value)

dict的setdefault方法返回存储在key的当前值,或者存储在key的第二个参数(在本例中为空列表)中传递的值,并且返回。将值附加到列表就会对其进行修改,因此此代码会添加到存储在dict中的列表key(这是现有列表或我们刚刚传入的新列表。

您的main功能没问题,所以我只会展示更新的buildIndex

def buildIndex(text):
    words=text.split()
    index={}                           # changed from a list to a dict
    for i, word in enumerate(words):   # more pythonic than range(len(words))
        lower = word.lower()           # better than str.lower(word)
        index.setdefault(lower, []).append(i)
    for k, v in sorted(index.items()):
        print(k, v)
    return index   

我添加了return index,以防你想在更多代码中使用它(如果你这样做,你可能想要删除打印索引的循环,但这取决于你)。