首页 > 解决方案 > python中的自我和参数传输

问题描述

我有一个代码:

class ListNode:
     def __init__(self, val=0, next=None):
         self.val = val
         self.next = next
class Solution(object):
     def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
         dummy = cur = ListNode(0)
         carry = 0
         while l1 or l2 or carry:
             if l1:
                 carry += l1.val
                 l1 = l1.next
             if l2:
                 carry += l2.val
                 l2 = l2.next
             cur.next = ListNode(carry%10)
             cur = cur.next
             carry //=10
         return dummy.next
l1 = [2, 4, 3]
l2 = [5, 6, 4]
print(Solution.addTwoNumbers(l1, l2))

但它不起作用,我应该怎么做才能让它起作用?它写道 addTwoNumbers() 缺少 1 个必需的位置参数。(我不想在 Listnode 类中添加“def add”)

标签: pythonpython-3.xfunctionclass

解决方案


这里的“Pythonic”修复是删除Solution类。这是 Java 中非常常见的约定(所有内容都必须显式定义为对象类),但在 Python 中完全没有必要。

class ListNode:
    def __init__(self, val=0, next=None) -> None:
        self.val = val
        self.next = next

    def __repr__(self) -> str:
        repr = f"ListNode<{self.val}"
        n = self.next
        while n is not None:
            repr += f", {n.val}"
            n = n.next
        repr += ">"
        return repr


def addTwoNumbers(l1: ListNode, l2: ListNode) -> ListNode:
    dummy = cur = ListNode(0)
    carry = 0
    while l1 or l2 or carry:
        if l1:
            carry += l1.val
            l1 = l1.next
        if l2:
            carry += l2.val
            l2 = l2.next
        cur.next = ListNode(carry % 10)
        cur = cur.next
        carry //= 10
    return dummy.next


def addTwoLists(l1: list, l2: list) -> list:
    ret = []
    carry = 0
    for i1, i2 in zip(l1, l2):
        ret.append(i1 + i2 + carry)
        carry = 0
        if ret[-1] >= 10:
            carry = 1
            ret[-1] -= 10
    if carry:
        ret.append(carry)
    return ret
    # alternate one-line implementation: return list(reversed(str(int(''.join(map(str, reversed(l1)))) + int(''.join(map(str, reversed(l2)))))))


n1 = ListNode(2, ListNode(4, ListNode(3)))
n2 = ListNode(5, ListNode(6, ListNode(4)))
print(addTwoNumbers(n1, n2))

l1 = [2, 4, 3]
l2 = [5, 6, 4]
print(addTwoLists(l1, l2))

推荐阅读