t = 8
string = "1 2 3 4 3 3 2 1"
string.replace(" ","")
string2 = [x for x in string]
print string2
for n in range(t-1):
string2.remove(' ')
print string2
def remover(ca):
newca = []
print len(ca)
if len(ca) == 1:
return ca
else:
for i in ca:
newca.append(int(i) - int(min(ca)))
for x in newca:
if x == 0:
newca.remove(0)
print newca
return remover(newca)
print (remover(string2))
它应该是一个程序,它接收一个数字列表,并且列表中的每个数字都从中减去min(list)。它适用于前几次迭代,但不是最后的。我已经在这里和那里添加了打印语句来帮助你。
修改
t = 8
string = "1 2 3 4 3 3 2 1"
string = string.replace(" ","")
string2 = [x for x in string]
print len(string2)
def remover(ca):
newca = []
if len(ca) == 1: return()
else:
for i in ca:
newca.append(int(i) - int(min(ca)))
while 0 in newca:
newca.remove(0)
print len(newca)
return remover(newca)
print (remover(string2))
答案 0 :(得分:2)
for x in newca:
if x == 0:
newca.remove(0)
迭代列表并同时删除它可能会导致奇怪和意外的behvaior。请尝试使用while
循环。
while 0 in newca:
newca.remove(0)
或列表理解:
newca = [item for item in newca if item != 0]
或者创建另一个临时列表:
newnewca = []
for x in newca:
if x != 0:
newnewca.append(x)
print newnewca
return remover(newnewca)
答案 1 :(得分:1)
(不是真正的答案,JFYI:)
如果将程序分解为适当的部分,您的程序可以更短。
def aboveMin(items):
min_value = min(items) # only calculate it once
return differenceWith(min_value, items)
def differenceWith(min_value, items):
result = []
for value in items:
result.append(value - min_value)
return result
像往常一样,上述模式可以用理解来代替:
def differenceWith(min_value, items):
return [value - min_value for value in items]
试一试:
>>> print aboveMin([1, 2, 3, 4, 5])
[0, 1, 2, 3, 4]
请注意,如何删除任何项目,并且数据通常不会发生变异。这种方法有助于推理关于程序的很多事情;试试吧。
答案 2 :(得分:0)
所以 IF 我已经理解了你所期望的描述,
我相信下面的脚本会让您更接近目标。
逻辑:
string = raw_input()
array = string.split()
intarray = []
for x in array:
try:
intarray.append(int(x))
except:
pass
def remover(arrayofint):
newarray = []
minimum = min(arrayofint)
for i in array:
if i > minimum:
newarray.append(i - minimum)
if len(newarray) > 0:
print newarray
remover(newarray)
remover(intarray)