在我的代码中,我希望从用户那里获取一串文本并将其分成单个单词,然后获取这些单词的索引。我这样做但是我遇到了两个问题。首先,我需要将索引显示在单词旁边(例如:"分析:[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()
答案 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
,以防你想在更多代码中使用它(如果你这样做,你可能想要删除打印索引的循环,但这取决于你)。