python - 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”)
解决方案
这里的“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))
推荐阅读
- powershell - 如何使用任务计划程序启动 .cmd 文件?
- c# - 以编程方式在 WPF 应用程序中生成进度条
- matrix - 如何在ssrs中添加百分比列
- php - 不要缓存没有特定 cookie 的页面 - W3 Total Cache for Wordpress
- python - 带有 numpy 的布尔矩阵 - 按位运算问题
- phpunit - symfony 4 表单单元测试不起作用
- arrays - $.Ajax 将字符串作为数组发布到 PHP 脚本
- c++ - 引用静态数据成员
- shell - 如果有多个条件,则获取每个失败的结果
- c# - 在 C# 中的非 ui 线程上将多个控件添加到流面板中