我正在阅读一长串单词,我为列表中的每个单词建立了一个节点。每个节点在列表中的位置都有一个属性“word”。在
我尝试将一个节点连接到下一个节点,如果下一个节点是上一个节点,只添加一个字母
我还按字母顺序排列每个字符的每个单词,以便CAT->;ACT
我想从每个唯一的起始词到所有可能的链之间画一条边,这样我就可以看到列表中所有可能的链。在
例如
一声巨响
但是A--x->;T
这是我的尝试
for i in range(0, G.number_of_nodes()-1):
if ( ( (len(G.node[i]['word'])+1) == len(G.node[i+1]['word']) ) and (G.node[i]['word'] in G.node[i+1]['word'])):
print G.node[i]['word'], G.node[i+1]['word']
给了我这个
^{pr2}$What the word list and the alphabetical list looks like
为什么我看不见里面?在
还有,阿格朗特·阿格朗斯特应该在那里,但我不明白为什么,还有其他很多对
你觉得我哪里做错了?在
您似乎只是将每个节点与另一个节点进行比较,所以
“IN”直接跟在单词表中的“I”后面,但“INW”不在“IN”之后
看起来像是一个正式的语言问题。如何处理循环节点?在
INW在你给的单子里。在
AGNRT AGNRST不在列表中,因为您从一个字母开始,该字母必须在下一个单词中—例如I->;in,但in不在AGNRT或AGNRST中
问题是,您只比较列表中相邻出现的单词,即单词},例如}相邻出现,},但是}相距甚远。似乎你想比较所有可能的单词,这需要一个更复杂的算法。有个主意:
i
和{I
和{WIN
和{IN
和{{"ACT": ["CAT", "ACT", "TAC], ...}
。对此,collections.defaultdict(list)
将很有用。在list.sort(key=len)
,假设您只有一个单词列表。在n-1
。像for i in range(len(word)): process(word[:i] + word[i+1:])
。你可能要小心这里的重复。在相关问题 更多 >
编程相关推荐