Python 解释布尔-在未排序数组中查找第k个最大元素
我试图解决标题中提到的Leetcode问题(我不是在寻求最佳答案,而是在寻找一种现象的解释) 这是我的算法: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]
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
的状态不一样,因此输出也不一样。你不能把一个变异的对象当作常数来推理。