Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解释布尔-在未排序数组中查找第k个最大元素_Python_Algorithm - Fatal编程技术网

Python 解释布尔-在未排序数组中查找第k个最大元素

Python 解释布尔-在未排序数组中查找第k个最大元素,python,algorithm,Python,Algorithm,我试图解决标题中提到的Leetcode问题(我不是在寻求最佳答案,而是在寻找一种现象的解释) 这是我的算法: def findKthLargest(nums, k) : def findrealposition(index,nums): ind = index index1 = index + 1 while index1 < len(nums) : if nums[ind] < nums[index1]

我试图解决标题中提到的Leetcode问题(我不是在寻求最佳答案,而是在寻找一种现象的解释)

这是我的算法:

def findKthLargest(nums, k) :
    def findrealposition(index,nums):
        ind = index
        index1 = index + 1
        while index1 < len(nums) :
            if nums[ind] < nums[index1] : 

                index1 += 1
            else : 
                nums[ind], nums[index1] = nums[index1], nums[ind]
                ind += 1
                index1 += 1

        return ind, nums
    index = 0
    while findrealposition(index,nums)[0] != len(nums)-k : 

        if findrealposition(index,nums)[0] < len(nums)-k : 
            print('less')
            index, nums = 0, findrealposition(index,nums)[1]
        else : 
            print('more')
            index, nums = findrealposition(index,nums)
    return nums[len(nums)-k]
def findKthLargest(nums,k):
def findrealposition(索引,nums):
ind=索引
index1=索引+1
当index1
问题如下:运行算法时,将[4,3,1]作为列表,1作为位置,输入为0的“findrealposition”函数(因此4的位置带有排序列表)将2作为输出(列表作为第二个位置)。这是件好事。但是当我打印(findrealposition(0,nums)[0]<2)时,输出是。。。对。因此,wy while循环是一个无限循环


我想Python有一个我不知道的微妙之处,这让我失败了。

这与布尔无关

对于某些函数而言,
f(nums)==2
很有可能为真,然后
f(nums)<2
很可能随后立即为真,而这不是一个悖论或表明语言中的根本缺陷。原因很简单,
f(nums)
可以返回2,然后再次调用
f(nums)
可以返回1。
2==2
1<2
都是真的,这应该不会让任何人感到惊讶

您的函数实际上是这样运行的:

>nums=[4,3,1]
>>>findrealposition(0,nums)
(2, [3, 1, 4])
>>>findrealposition(0,nums)
(1, [1, 3, 4])

此函数每次提供不同的输出,因为您为其提供了不同的输入。
findrealposition
函数更改
nums
元素的顺序,因此当您第二次调用它时,它们的顺序不同,函数计算的输出也不同。

对不起,“布尔错误”是什么?听起来好像一个数字不是你想象的那样,不是因为不知何故,对布尔值答案的误解会是一个更合适的标题。所以,我的问题是:为什么当输出为2时,(我打印了它),布尔值(输出<2)会给我“真”?问题是你在改变你的列表,在打印和比较之间更改
findrealposition
的值。该变异导致新的返回值为
1
。要看到这一点,请连续打印两次
indrealposition(0,nums)
。它将为您提供
2
,因为当您传递它时,这是给定
nums
状态的输出。但是--下次调用它时,
nums
的状态不一样,因此输出也不一样。你不能把一个变异的对象当作常数来推理。