鱼C论坛

 找回密码
 立即注册
查看: 2932|回复: 6

[已解决]如何实现这段代码求大佬告知

[复制链接]
发表于 2023-2-12 21:14:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
比如给定的列表 nums = [2, 7, 11, 15],目标值 target = 9,那么由于 nums[0] + nums[1] = 2 + 7 = 9,所以打印结果是:[0, 1]

最佳答案
2023-3-11 16:52:33
这个问题可以使用两次循环来解决。对于列表中的每一对元素,判断它们的和是否等于目标值,如果是则返回这两个元素的下标。

下面是一个实现这个功能的函数:

def find_two_sum(nums, target):
    n = len(nums)
    for i in range(n):
        for j in range(i+1, n):
            if nums[i] + nums[j] == target:
                return [i, j]
    return None
这个函数的参数是一个列表 nums 和一个目标值 target,它的返回值是一个包含两个元素的列表,这两个元素是 nums 列表中相加得到目标值的两个元素的下标,如果找不到这样的两个元素,则返回 None。

在实现中,首先使用一个外层循环枚举列表中的每一个元素,然后内层循环从当前元素的后一个位置开始枚举后面的所有元素。对于每一对元素,判断它们的和是否等于目标值,如果是则返回它们的下标。

下面是一个调用上述函数的例子:

nums = [2, 7, 11, 15]
target = 9
result = find_two_sum(nums, target)
print(result)  # 输出 [0, 1]
可以看到,这个例子中函数返回了结果 [0, 1],表示列表中的第 0 个元素和第 1 个元素相加得到了目标值 9。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-12 21:27:14 | 显示全部楼层
本帖最后由 ba21 于 2023-2-12 21:54 编辑
nums = [2, 7, 11, 15]
target = 17

for i, v in enumerate(nums[:len(nums)//2]):
    b = target - v
    if b in nums:
       j = nums.index(b)
       print([i, j])
       break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-12 21:27:57 | 显示全部楼层
本帖最后由 isdkz 于 2023-2-12 21:40 编辑

nums = [2, 7, 11, 15]
target = 9
for i1, v1 in enumerate(nums):
    for i2, v2 in enumerate(nums[i1 + 1:], i1 + 1):
        if  v1 + v2 == target:
            print([i1, i2])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-12 21:29:51 | 显示全部楼层
nums , target = [2, 7, 11, 15] , 9
for i in range(len(nums) - 1):
    for j in range(i + 1 , len(nums)):
        if nums[i] + nums[j] == target : 
            print([i , j])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-12 21:36:55 | 显示全部楼层

大佬这是什么意思可以细说一下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-11 16:52:00 | 显示全部楼层
函数 find_two_sum,用于在给定列表 nums 中查找是否存在两个元素相加等于目标值 target,如果存在,则返回这两个元素的下标。

这个函数的实现思路比较简单,它使用两次循环来枚举列表中所有可能的元素组合,对于每一对元素,判断它们的和是否等于目标值,如果是则返回它们的下标。

函数的具体实现如下:

def find_two_sum(nums, target):
    n = len(nums)  # 获取列表长度
    for i in range(n):  # 外层循环枚举列表中的每一个元素
        for j in range(i+1, n):  # 内层循环从当前元素的后一个位置开始枚举后面的所有元素
            if nums[i] + nums[j] == target:  # 判断当前两个元素的和是否等于目标值
                return [i, j]  # 如果是,则返回它们的下标
    return None  # 如果循环结束都没有找到符合条件的元素,则返回 None
在函数内部,首先获取列表的长度 n,然后使用一个外层循环枚举列表中的每一个元素。在外层循环的每一次迭代中,使用一个内层循环从当前元素的后一个位置开始枚举后面的所有元素。对于每一对元素,在判断它们的和是否等于目标值后,如果是,则返回它们的下标;如果循环结束都没有找到符合条件的元素,则返回 None。

需要注意的是,在内层循环中,从当前元素的后一个位置开始枚举后面的所有元素,是为了避免重复计算,因为如果从当前元素的前一个位置开始枚举,那么之前已经计算过的组合将会被重复计算一次。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-11 16:52:33 | 显示全部楼层    本楼为最佳答案   
这个问题可以使用两次循环来解决。对于列表中的每一对元素,判断它们的和是否等于目标值,如果是则返回这两个元素的下标。

下面是一个实现这个功能的函数:

def find_two_sum(nums, target):
    n = len(nums)
    for i in range(n):
        for j in range(i+1, n):
            if nums[i] + nums[j] == target:
                return [i, j]
    return None
这个函数的参数是一个列表 nums 和一个目标值 target,它的返回值是一个包含两个元素的列表,这两个元素是 nums 列表中相加得到目标值的两个元素的下标,如果找不到这样的两个元素,则返回 None。

在实现中,首先使用一个外层循环枚举列表中的每一个元素,然后内层循环从当前元素的后一个位置开始枚举后面的所有元素。对于每一对元素,判断它们的和是否等于目标值,如果是则返回它们的下标。

下面是一个调用上述函数的例子:

nums = [2, 7, 11, 15]
target = 9
result = find_two_sum(nums, target)
print(result)  # 输出 [0, 1]
可以看到,这个例子中函数返回了结果 [0, 1],表示列表中的第 0 个元素和第 1 个元素相加得到了目标值 9。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 01:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表