我正在从事以下工作: 编写一个返回列表的第n个最低编号(或通常可迭代)的函数。如果未指定第二个参数,则返回最低的 请注意,如果列表中包含重复项,则应在确定第n个最低值之前对其进行处理
我的以下工作正常:
numbers = [8,9, 1,300,5, 54, 54]
def nth_lowest(b, n='N/A'):
nums = set(b)
if n == 'N/A':
return min(b)
else:
nums = sorted(nums)
return nums[n-1]
print(nth_lowest(numbers))
print(nth_lowest('ananasgnasgzynrmas', 6))
print(nth_lowest(numbers, 4))
但是我想尝试在不使用内置SET或MIN函数的情况下编写它。这是我所拥有的:
numbers = [8,9, 1,300,5, 54, 54]
def nth_lowest(b, n='N/A'):
nums = []
new_list = []
for i in b: # instead of using set()
if i not in nums:
nums.append(i)
nums = sorted(nums)
if n == 'N/A':
while b: # instead of using min()
minimum = b[0]
for x in b:
if x < minimum:
minimum = x
new_list.append(minimum)
b.remove(minimum)
return new_list
else:
return nums[n-1]
print(nth_lowest(numbers))
print(nth_lowest('ananasgnasgzynrmas', 6))
print(nth_lowest(numbers, 4))
但以下内容有误:
return nums[n-1]
IndexError: list index out of range
有什么想法吗?
答案 0 :(得分:1)
问题在于您在算法b.remove(minimum)
期间修改了输入列表。然后,当您第二次使用numbers
时,它实际上是空的,nums
也是如此。您可以在函数顶部添加以下内容以创建输入的副本:
b = [x for x in b]