我需要连接列表的连续单词。
列表是:
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也用其他的话做同样的事情?
答案 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