【发布时间】:2021-08-30 17:38:18
【问题描述】:
简而言之,这是计划:我想从 Python 列表中删除最小值。我的方法是创建一个新列表 trimmed ,它基本上是原始列表的副本,但条件如下:
仅当值不等于 min() 时才将其添加到 trimmed。像这样:
lis=[]
trimmed =[]
n = int(input("Enter number of elements : "))
for i in range(0, n):
elements = int(input("Type a number: "))
lis.append(elements) # adding the elements
# "trimmed" appends a new copy of "lis" removing the smaller value
trimmed = [x for i,x in enumerate(lis) if i != min(lis)]
print(trimmed)
问题是,它有时似乎是通过删除特定索引中的值而不是删除实际较小的值来构建trimmed。例如。我刚刚输入了 5 ,2 ,6 和 9。它应该 ramv 删除了第二个。相反,它会打印出 [5, 2, 9]
【问题讨论】:
-
好吧,当然,因为这是你在你的条件下使用的,
ifromfor i,x in enumerate(lis)是索引。跨度> -
在
for i,x in enumerate(lis)中,i是元素的索引,而不是值。最小值为 2,因此无论其值如何,您都忽略了索引 2 处的元素。 -
顺便说一句,将
min(lis)移出循环。通过将min(lis)放入列表理解条件中,您已经创建了一个线性时间算法二次时间。