字符串相加、偶数求和 - Python

本文介绍了一种利用Python实现两个大整数字符串相加的方法,并提供了多种优化方案。此外,还展示了如何通过不同方式高效计算1到5000间所有偶数的总和,包括使用循环、内置函数及函数式编程方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目一:求两个字符串类型数字的和

class Solution:
    def addStrings(self, num1: str, num2: str) -> str:
        li1, len1 = list(num1), len(num1)
        li2, len2 = list(num2), len(num2)
        res = []
        before = 0
        if len1 < len2:
            for i in range(len2 - len1):
                li1.insert(0, '0')
        elif len1 > len2:
            for i in range(len1 - len2):
                li2.insert(0, '0')
        print(li1,li2)
        for i in range(len(li1)-1, -1, -1):
            temp = int(li1[i]) + int(li2[i]) + before
            now = temp % 10
            before = temp // 10
            res.insert(0,str(now))
        if before != 0:
            res.insert(0,str(before))
        return ''.join(res)

优化的解法:

class Solution:
    def addStrings(self, num1: str, num2: str) -> str:
        i, j = len(num1) - 1, len(num2) - 1
        carry = 0
        res = ''
        while i >= 0 or j >= 0:
            n1 = int(num1[i]) if i >= 0 else 0
            n2 = int(num2[j]) if j >= 0 else 0
            temp = n1 + n2 + carry
            carry = temp // 10
            res = str(temp % 10) + res
            i, j = i - 1, j - 1
        return '1' + res if carry else res

题目二:一行实现1-5000之间所有偶数求和

# 常规写法
res = 0
for i in range(5001):
    if i % 2 == 0:
        res += i
print(res)

# 这么写还是错的
# res += i for i in range(2, 5001, 2)
#     print(res)

# 优化一:range步长为2
res = 0
for i in range(2, 5001, 2):
    res += i
print(res)

# 优化二:使用sum函数和range函数
print(sum(range(2, 5001, 2)))

# 优化三:使用reduce函数和lambda函数
from functools import reduce
print(reduce(lambda a, b: a + b, range(2, 5001, 2)))

 

<think>好的,用户的问题是在Python中如何对列表中的数字求和,需要提供一个示例。首先,我需要确认用户的需求,他们可能有一个包含数字的列表,想要知道如何计算Python中有几种方法可以实现这一点,最常见的是使用内置的sum()函数,但可能用户想了解其他方法,比如循环或者使用其他函数如reduce()。 首先,我应该想到最简单的办法就是sum()函数,直接对列表求和。这应该是最直接的方法,代码简洁高效。例如,sum([1,2,3])会返回6。这应该作为主要推荐的方法。 然后,考虑到用户可能需要其他方法,比如手动循环累加。这时候可以展示一个使用for循环的例子,初始化一个变量,然后遍历列表中的每个元素,依次相加。这对于理解求和的过程有帮助,特别是对于初学者来说,可以更清楚地看到每一步的操作。 另外,用户可能听说过使用reduce函数,这属于函数式编程的方法。需要导入functools模块中的reduce,然后结合lambda函数来累加元素。例如,reduce(lambda x,y: x+y, numbers)。这种方法虽然不太常用,但可以作为备选方案介绍。 接下来,我需要检查是否有相关的引用内容可以支持这些方法。例如,引用[3]提到了reduce函数的使用,需要注意处理空列表的情况,可能需要初始值。引用[2]中的代码展示了如何用循环处理奇数的求和,可以类比到一般的求和情况。引用[4]中的问题涉及数组求和,虽然具体是偶数,但方法类似。 还需要注意可能的错误情况,比如列表中包含非数字类型,或者列表为空的情况。例如,使用sum()函数时,如果列表为空,sum()会返回0,而reduce()在空列表且没有初始值时会抛出错误,这时候需要处理异常或者提供初始值。 最后,生成相关问题,可能包括如何求特定条件的(比如偶数或奇数),如何处理大列表的性能问题,或者如何对嵌套列表求和。这些问题可以帮助用户进一步扩展他们的知识。 总结回答的结构应该是先介绍sum()函数,然后展示循环方法,再介绍reduce(),最后提到错误处理注意事项,并附上相关引用。同时生成的问题需要覆盖不同求和场景,以便用户深入探索。</think>在Python中,对列表中的数字求和有以下几种常见方法: ### 1. 使用内置函数`sum()` 这是最简单直接的方法,适用于任何数字类型的列表(如整数、浮点数): ```python numbers = [1, 2, 3, 4, 5] total = sum(numbers) print(total) # 输出15 ``` ### 2. 使用循环累加 手动实现求和过程,适用于需要自定义逻辑的场景: ```python numbers = [10, 20, 30] total = 0 for num in numbers: total += num print(total) # 输出60 ``` ### 3. 使用`reduce()`函数(需导入`functools`) 函数式编程方法,适合链式操作: ```python from functools import reduce numbers = [2, 4, 6] total = reduce(lambda x, y: x + y, numbers) print(total) # 输出12 ``` 若列表可能为空,需指定初始值避免错误:`reduce(lambda x,y: x+y, [], 0)`[^3] ### 注意事项 - 列表中若含非数字类型(如字符串),`sum()`会抛出`TypeError` - 超大列表建议使用`sum()`,其底层为C实现,性能更优
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值