【问题标题】:How to have a linked list within a linked list in Python 3.x如何在 Python 3.x 的链表中拥有链表
【发布时间】:2016-03-15 15:08:16
【问题描述】:

所以我的目标是有两个类,一个包类和一个容器类。包类将具有(所有者、目的地、重量)作为参数。使用链表,我想根据包裹的目的地和重量创建新的容器(最大重量 2000 磅)。

> For eg: if package class has the function add(owner, destination,
> weight)
>         package.add("Jason", "Antarctica", 56)
>         package.add("Julio", "Dubai", 84)
>         package.add("Mason", "Antarctica", 84)

上述包裹应创建两个集装箱,目的地为南极洲和迪拜,南极洲的重量为 140(56+84),迪拜的重量为 84。这是我目前所拥有的。

# Linked List Container
class Container:
    value = (self.own, self.dest, self.weight)

    # Queue class Initialization        
    def __init__(self):
        self._rear = None
        self._front = None
        #self._first = None
        self._size = 0

    # Defining the node
    class _Node:
        def __init__(self, elem, next):
            self._elem = elem
            self._next = next


    # Adding the first item into the queue through the rear    
    def enqueue(self, value):
        if self.isEmpty():
            self._front = self._Node(value, None)
            self._rear = self._front
            self._size += 1
            return
        self._rear._next = self._Node(value, None)
        self._rear = self._rear._next
        self._size += 1
        return

    class Package:
        def add(self, owner, destination, weight):
            self.own = owner
            self.dest = destination
            self.weight = weight

我们将不胜感激任何见解和帮助。我只是不知道如何将两个链接列表链接在一起。

【问题讨论】:

    标签: python class python-3.x linked-list


    【解决方案1】:

    我会以不同的方式构建它。自定义链表或节点可能不是必需的,因为 Python 原生列表提供了相同的功能。您可以遍历它们并在列表中的任何位置添加/删除项目。

    我会创建包并将它们添加到一个容器对象中,该对象根据目的地组织它们。比如:

    class Package:
        def __init__(self, owner, destination, weight):
            self.own = owner
            self.dest = destination
            self.weight = weight
    
    class Container:
        def __init__(self, destination):
            self.packages = []
            self.destination = destination
            self.weight = 0
    
        def add(self, package):
            self.packages.append(package)
            self.weight = self.weight + package.weight
    
    class Containers:
        def __init__(self):
            self.containers = []
    
        def enqueue(self, package):
            for self.containers as c:
                if c.destination = package.destination:
                    c.add(package)
                    return;
            # New destination
            c = Container(package.destination)
            c.add(package)
            self.containers.append(c)
    

    然后匹配您的示例用法:

    containers = Containers()
    containers.add("Jason", "Antarctica", 56)
    containers.add("Julio", "Dubai", 84)
    containers.add("Mason", "Antarctica", 84)
    

    【讨论】:

    • 这个算法我从来没有想过。这让我的事情变得更简单。谢谢。
    • 很高兴能帮上忙!
    • 但是有没有办法使用节点而不是 python 列表?
    • 当然,你可以单独实现一个链表。使用 python 的本机功能,我看不到任何好处。但这里有一个例子:interactivepython.org/runestone/static/pythonds/BasicDS/…
    • 您的示例用法不起作用,因为 Containers() 没有名为 add @Matt 的属性
    猜你喜欢
    • 2020-03-12
    • 2021-12-22
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多