连接列表的连续单词

时间:2014-01-03 10:48:30

标签: python list graph distance

我需要连接列表的连续单词。

列表是:

lis = ['hello', 'world', 'I', 'say', 'hello', 'to', 'you']

我只是连接单词,如果它们相邻,则通过图形(我通过类创建)。 所以'你好'与'世界','世界'到'你好'和'我','我'到'世界'和'说'有关。

我这样对python这样说。

g = Graph()   #A graph is described by a proper class. 

for el in lis:
    for el1 in lis:
        if abs(lis.index(el) - lis.index(el1)) == 1:  #if the distance is 1
           g.addEdge(el, el1)    #this creates connections 

这个工作但是如果在列表中有相同的单词(在这种情况下为'hello'和'hello'),算法只连接两个单词中的第一个(在这种情况下只是第一个'hello')。

我怎么说python也用其他的话做同样的事情?

2 个答案:

答案 0 :(得分:1)

您可以制作元素元组(index, word),然后(0, "hello")(4, "hello")不同:

elements = list(enumerate(lis))

请注意,您还可以简化邻接测试,例如:通过zip ping:

for pair in zip(elements, elements[1:]):

pair的位置,例如(0, 'hello'), (1, 'world')

把它们放在一起:

elements = list(enumerate(lis))
for pair in zip(elements, elements[1:]):
    g.addEdge(*pair)

答案 1 :(得分:0)

一次完成所有事情:

prev = None
for word in lis:
    if prev is not None:
        g.addEdge(prev, word)
    prev = word

如果None是有效字,则可以执行以下操作:

_MISSING = object()
prev = _MISSING

if prev is not _MISSING