为什么我的循环没有迭代列表中的第二个相同值?

2024-06-10 22:08:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个函数,将列表中的两个最大值相乘

例如:nums = [5,2,5,4]

这里我的结果应该是25乘以5(指数0)和5(指数2)

但它给出了20

为什么不迭代或考虑列表中的下一个5,即索引2的5

def max_pair_product_fast(nums):
    num1 = max(nums)
    print("Maximun = ", num1, "Index = ",nums.index(num1))
    num2 = 0
    for i in nums:
        if  nums.index(num1) != nums.index(i) and num2 < =  i :
            num2 = i
            print("Num 2 : ",num2)

    return num1 * num2

nums = [5,2,5,4]

print("Multiplication = ",max_pair_product_fast(nums))

输出:

PS D:\Code> & C:/Users/kshar/AppData/Local/Microsoft/WindowsApps/PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0/python.exe d:/Code/Algo/mppf.py


Maximun =  5 Index =  0

Num 2 :  2

Num 2 :  4

Multiplication =  20

如果我删除条件nums.index(num1) != nums.index(i),那么它只会将最大值(在本例中为5)与自身相乘


Tags: 列表indexproduct指数nummaxfastprint
3条回答

海报是在问他原来的代码有什么问题,而不是简单地要求一块没有任何解释的新代码

这行代码可能导致问题

if  nums.index(num1) != nums.index(i) and num2 <= i:

以您的示例为例,列表为[5,2,5,4]

num1是第一个最大值,5。此5的索引为0。但是,第二个最大值也是5。这个5的索引为2

编写nums.index(i)时,您希望程序知道第二个5位于索引2,但是,nums.index()函数将返回第一个出现的数字。因此,在这个迭代中nums.index(5)的值仍然是0

因此,您的程序会忽略这5,因为nums.index(5)总是0,它等于num1的索引

请尝试下面的方法以避免此问题:

def max_pair_product_fast(nums):
num1 = max(nums)
print("Maximun = ", num1, "Index = ",nums.index(num1))
num2 = 0
for index in range(len(nums)):
    if  nums.index(num1) != index and num2 <= nums[index]:
        num2 = nums[index]
        print("Num 2 : ",num2)

return num1 * num2

您可以这样做:

def max_pair_product_fast(nums):
    num1 = max(nums)
    print("Maximun = ", num1, "Index = ",nums.index(num1))
    num2 = 0
    nums.remove(num1);
    print (nums)
    num2=max(nums)
    return num1 * num2

nums = [5,2,5,4,6,7,6]

print("Multiplication = ",max_pair_product_fast(nums))
def max_pair_product_fast(nums):
    nums.sort(reverse=True)
    return nums[0]*nums[1]
    # OR
    # nums.sort()
    # return nums[-1]*nums[-2]
    

nums = [5,2,5,4]
print("Multiplication = ",max_pair_product_fast(nums))

相关问题 更多 >