Python 如何获取列表的最小整数值
我有一个名为Python 如何获取列表的最小整数值,python,list,Python,List,我有一个名为weight的变量,它是一个充满int值的列表。在循环的每一轮之后,我想要么隐藏当前最小值,要么用“o”替换它,这样我就可以找到下一个最小值权重=[4,2,4,1,3,5,6,2,3]将变成[4,2,4,'o',3,5,6,2,3]。。我遇到的问题是,当循环进行第二次运行时,它产生了一个错误,因为添加了“o” def greedyMinWt(): weight = [4,2,4,1,3,5,6,2,3] value = [7,9,9,8,5,8,3,5,2]
weight
的变量,它是一个充满int值的列表。在循环的每一轮之后,我想要么隐藏当前最小值,要么用“o”替换它,这样我就可以找到下一个最小值<例如,代码>权重=[4,2,4,1,3,5,6,2,3]将变成[4,2,4,'o',3,5,6,2,3]
。。我遇到的问题是,当循环进行第二次运行时,它产生了一个错误,因为添加了“o”
def greedyMinWt():
weight = [4,2,4,1,3,5,6,2,3]
value = [7,9,9,8,5,8,3,5,2]
itemPick = [4,2,4,1,3,5,6,2,3]
val = 0
weightCount = 0
itemCounter = 0
valueCount = 0
totalWeight = 0
totalValue = 0
weightInput = -1
pickedItems = []
n=0
capacity = 17
print('Itm|' + ' Wt|' + ' Val' )
for num in range(0,len(weight)):
print('(' + str(num+1) + ')' + '\t ' + str(weight[num]) + '\t ' + str(value[num]))
print('\nSolve by greedy min wt:')
while totalWeight < capacity:
minWt = min(weight)
val = value[weight.index(min(weight))]
totalWeight += minWt
totalValue += val
slackWt = capacity - totalWeight
'Need to fix this so it will print out the correct pick'
if totalWeight > capacity:
totalWeight-= min(weight)
totalValue -=val
print('\n__Greedy min weight __ \nItems Picked: '+ ' #' + ' #'.join(pickedItems))
print('Feasible' + '\t' + 'WeightCount:' + str(totalWeight) + '\tValueCount:' + str(totalValue) + '\n' + 'The capacity is:' + str(capacity))
return None
print('pick =' + str(weight.index(minWt)+1) + ' accumWt=' + str(totalWeight) + ' slackWt=' + str(slackWt) + ' accumVal=' + str(totalValue))
weight[weight.index(min(weight))] = 'o'
print(weight)
def greedyMinWt():
重量=[4,2,4,1,3,5,6,2,3]
值=[7,9,9,8,5,8,3,5,2]
itemPick=[4,2,4,1,3,5,6,2,3]
val=0
权重计数=0
itemCounter=0
valueCount=0
总重量=0
totalValue=0
权重输入=-1
pickedItems=[]
n=0
容量=17
打印('Itm |'+'Wt |'+'Val')
对于范围(0,len(权重))中的num:
打印('('+str(num+1)+')'+'\t'+str(weight[num])+'\t'+str(value[num]))
打印('\n按贪婪最小重量保存:')
当总重量<容量时:
最小重量=最小(重量)
val=值[重量指数(最小(重量))]
总重量+=最小重量
totalValue+=val
松弛重量=容量-总重量
'需要修复此问题,以便打印出正确的选择'
如果总重量>容量:
总重量-=最小(重量)
totalValue-=val
打印('\n_uuu贪婪最小重量\uuuuu拾取的项:'+'.'+'.'.'.'.join(pickedItems))
打印('可行'+'\t'+'权重计数:'+str(总权重)+'\tValueCount:'+str(总值)+'\n'+'容量为:'+str(容量))
一无所获
打印('pick='+str(weight.index(minWt)+1)+'acumwt='+str(totalWeight)+'slackWt='+str(slackWt)+'acumval='+str(totalValue))
重量[重量指数(最小(重量))]=“o”
打印(重量)
使用列表理解来提取整数:
min_weight = min([i for i in weight if str(i).isdigit()])
本例循环查看
权重列表并提取最小值。它将该值放入min\u weights
列表中。找到的值随后更改为o
注意:如果存在重复的最小值,则使用.index()
将第一个最小值替换为o
。下次通过循环时,将找到重复项,将其添加到其他列表中,然后更改为o
weight = [4,2,4,1,3,5,6,2,3]
min_weights = []
for x in range(len(weight)):
min_weights.append(min(weight))
weight[weight.index(min(weight))] = 'o'
print min_weights
print weight
这将产生以下结果:
[1, 2, 2, 3, 3, 4, 4, 5, 6] # This is your minimum weights
['o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o'] # This is your weight list after the loop is complete
如果你想按从最小到最大的顺序查找列表中的所有元素,为什么不对其进行排序呢?因为我需要它按特定的顺序排列,我想这样做way@Crunch嘿,再一次,看看下面我的答案。基本上,我对字符串进行强制转换,看看它们是否是严格意义上的数值。好吧,为什么您对当前的实现如此执着?有很多更好的方法。这是我的老师想要的方法。这不是我要求的。我想知道为什么在用“o”替换最小值(重量)后出现错误。这并不能回答我的问题。再一次。通过上面的精确编码,我如何确保一旦我将当前最小值替换为“o”,就不会出现错误,并且能够继续查找最小值?