首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在双向链表的字符串元素中查找字符索引,而不使用python中的类

在双向链表的字符串元素中查找字符索引,而不使用python中的类
EN

Stack Overflow用户
提问于 2018-11-10 02:33:17
回答 2查看 182关注 0票数 1

我正在编写一个包含一些有用函数的脚本来编辑双向链表,并且我没有使用OOP。所以没有使用任何类。

下面是一个双向链表的示例:

代码语言:javascript
复制
dll = ['So true', ['^very much', ['try it', ['Not yet', None, [...]], [...]], [...]], None]

注意,ddl元素的结构类似于:字符串,指向上一个节点的指针,指向下一个节点的指针

我正在尝试创建一个变量,它将双向链表中字符'^'的值作为“游标”(只是一个虚拟游标,但它实际上只是'^'字符的索引),而不使用类(可能是一个函数或几个函数?)。现在,"cursor“变量是指向节点(包含当前字符串)和该字符串中的位置的指针。

我想创建它的原因是用它来创建有用的函数,比如:将光标向左移动一个字符,将光标移动到行的开头,...etc。

cursor =带有字符串的双向链表中'^‘的索引。

所以我的问题是:如何在不使用类的情况下在双向链表中找到字符串中字符的索引?

EN

回答 2

Stack Overflow用户

发布于 2018-11-10 03:24:45

为了仅仅找到^字符的位置,您可以使用一个简单的递归函数来连接所有字符串(我假设所有字符串在嵌套列表中的位置都是0):

代码语言:javascript
复制
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("^"))查找索引。

编辑:

如果您想要元组(字符串、索引)形式的结果,则递归函数将如下所示:

代码语言:javascript
复制
def cursor(list):
    if "^" in list[0]:
        return list[0], list[0].index("^")
    else:
        return cursor(list[1])

请注意,如果光标字符未包含在任何字符串中,此简单函数将引发错误。

票数 1
EN

Stack Overflow用户

发布于 2018-11-10 05:29:33

首先,下面是从元素列表创建双向链表的函数。假设我们有一个字符串元素列表:

代码语言:javascript
复制
testList =['A lot', 'Very ^much', 'Try it', 'Nop']

现在,为了在testList之外构建双向链表,我们如下所示:

代码语言:javascript
复制
# 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

如果运行上面的函数构建器,则双向链表(双向可迭代)将为:

代码语言:javascript
复制
dll = dll = ['A lot', ['Very ^much', ['Try it', ['Nop', None, [...]], [...]], [...]], None]

我昨天已经这样做了,但是今天早上我在尝试解决光标问题时被卡住了。过了一段时间,我才让它工作起来(终于!)下面的函数将创建一个光标作为指向节点(包含当前行)和该行内位置的指针,如下所示:

代码语言:javascript
复制
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()函数:

代码语言:javascript
复制
print(cursor())

你会得到:

代码语言:javascript
复制
(['Very ^much', ['Try it', ['Nop', None, [...]], [...]], ['A lot', [...], None]], 5)
# Node 1 and string index 5

现在我可以创建一些有用的函数来编辑数据,修改,添加,删除,交换元素,在双向链表...etc的字符串元素中交换字符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53231504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档