我正在编写一个包含一些有用函数的脚本来编辑双向链表,并且我没有使用OOP。所以没有使用任何类。
下面是一个双向链表的示例:
dll = ['So true', ['^very much', ['try it', ['Not yet', None, [...]], [...]], [...]], None]注意,ddl元素的结构类似于:字符串,指向上一个节点的指针,指向下一个节点的指针
我正在尝试创建一个变量,它将双向链表中字符'^'的值作为“游标”(只是一个虚拟游标,但它实际上只是'^'字符的索引),而不使用类(可能是一个函数或几个函数?)。现在,"cursor“变量是指向节点(包含当前字符串)和该字符串中的位置的指针。
我想创建它的原因是用它来创建有用的函数,比如:将光标向左移动一个字符,将光标移动到行的开头,...etc。
cursor =带有字符串的双向链表中'^‘的索引。
所以我的问题是:如何在不使用类的情况下在双向链表中找到字符串中字符的索引?
发布于 2018-11-10 03:24:45
为了仅仅找到^字符的位置,您可以使用一个简单的递归函数来连接所有字符串(我假设所有字符串在嵌套列表中的位置都是0):
def join_nested_strings(list):
if list[1]:
return list[0] + join_nested_strings(list[1])
else:
return list[0]然后只需使用print(join_nested_strings(dll).index("^"))查找索引。
编辑:
如果您想要元组(字符串、索引)形式的结果,则递归函数将如下所示:
def cursor(list):
if "^" in list[0]:
return list[0], list[0].index("^")
else:
return cursor(list[1])请注意,如果光标字符未包含在任何字符串中,此简单函数将引发错误。
发布于 2018-11-10 05:29:33
首先,下面是从元素列表创建双向链表的函数。假设我们有一个字符串元素列表:
testList =['A lot', 'Very ^much', 'Try it', 'Nop']现在,为了在testList之外构建双向链表,我们如下所示:
# Build node function
def getNode(data):
return [data, None, None]
# Build the doubly linked list
def construct_double_list(testList):
nxt, prvs = 1, 2
start, end = None, None
for line in testList:
next_node = getNode(line)
if start is not None:
end[nxt] = next_node
next_node[prvs] = end
end = next_node
else:
start = next_node
end = next_node
return start, end如果运行上面的函数构建器,则双向链表(双向可迭代)将为:
dll = dll = ['A lot', ['Very ^much', ['Try it', ['Nop', None, [...]], [...]], [...]], None]我昨天已经这样做了,但是今天早上我在尝试解决光标问题时被卡住了。过了一段时间,我才让它工作起来(终于!)下面的函数将创建一个光标作为指向节点(包含当前行)和该行内位置的指针,如下所示:
def cursor():
cursor = (None, None)
start, end = construct_double_list(testList)
node = start
while node is not None:
line = node[0]
if '^' in line:
pointer1 = node
pointer2 = line.index('^')
node = node[1]
cursor = (pointer1, pointer2)
return cursor如果打印上面的cursor()函数:
print(cursor())你会得到:
(['Very ^much', ['Try it', ['Nop', None, [...]], [...]], ['A lot', [...], None]], 5)
# Node 1 and string index 5现在我可以创建一些有用的函数来编辑数据,修改,添加,删除,交换元素,在双向链表...etc的字符串元素中交换字符。
https://stackoverflow.com/questions/53231504
复制相似问题