我已经从这个网站获得了一些代码,我已根据自己的需要稍作修改。它需要一个句子,并在列表中显示单词的位置' l'。我基本上知道它是如何运作的,但我对一些细节感到难过,并希望有人可以用非常外行的方式向我解释......
以下是代码:
sentence = input("Please enter a sentence to analyse: ")
splitted = sentence.split()
dictionary = {}
l=[]
for i,j in enumerate(splitted):
if j in dictionary:
l.append(dictionary[j] + 1)
else:
dictionary[j]=i
l.append(i + 1)
print (l)
以下是我目前不能/不确定的事情:
1 - 两个变量i和j - 这些是通过列表并分配一个键(单词?)和一个值(位置)?通过打印字典,我可以看到它为每个单词分配了一个位置编号。这是发生了什么?
2 - 代码的哪一部分负责使用列表中的单词填充字典?使用打印命令我可以看到这发生在'如果'声明,但我无法理解它是如何发生的。我可以看到字典中的信息如何进入列表' l'。
3 - ' else语句看起来像是将任何重复的单词分配给数字并将它们添加到列表中,但是如上所述,我无法理解我的想法这是如何运作的。
我一直试图通过代码跟踪拆分器列表中某个单词的路径,但却无法得到它,所以任何有助于我理解的帮助都会很棒。
提前致谢!
答案 0 :(得分:2)
i
的值为1,2,3,4 ...... j
是您句子中的单词。
因此,for循环所做的是迭代句子中的所有单词,以及它们在句子中的相应位置。
如果你的句子是"我正在回答堆栈溢出问题",枚举将产生类似{0, I}, {1,am}, {2, answering}
等等。 在python中,可以通过为字典赋值来简单地填充字典。所以这一行就是诀窍:
字典[j] =我
例如,您的第一次迭代将导致字典内容{I:0}
,第二次迭代将导致内容{I:0,am:1}
。
使用list.append(...)
将项目添加到列表中。在这种情况下,添加字典的值(意思是索引i
!)。
我希望这能回答你的问题。我强烈建议阅读有关调试的内容,因为单步执行代码可以更容易理解发生的事情。
答案 1 :(得分:0)
else:
dictionary[j]=i
l.append(i + 1)
如果单词尚未出现在字典中,则执行else部分并在字典中插入新的键值对
答案 2 :(得分:0)
该算法首次出现句子的单词。您可以使用index()来加快速度。但是,如果要计算所有索引,则应为每个词典条目构建一个列表:
sentence = input("Please enter a sentence to analyse: ")
splitted = sentence.split()
dictionary = {}
for i,j in enumerate(splitted,start=1):
if j in dictionary:
dictionary[j].append(i)
else:
dictionary[j]=[i]
print dictionary
如果你不想从0开始,你也可以使用enumerate上的start选项。
答案 3 :(得分:-2)
我不认为我理解你的代码,但我写了另一个。 我的代码使用一个字典来保存关键字母的位置列表(如果你不理解我的话就运行代码。
sentence = raw_input("Please enter a sentence to analyse: ")
sentence.replace(' ', '') # removing spaces
dictionary = {}
for i in range(len(sentence)):
if sentence[i] in dictionary:
dictionary[sentence[i]] += [i]
else:
dictionary[sentence[i]] = [i]
print dictionary
我希望它对你有所帮助。如果你仍然需要它在列表中,请再次解释,也许这次我会理解。