Python 列表返回的值多于预期值
我有一个由两个值组成的列表,然后我将每个值乘以一个整数,直到两个元素都变成整数,并将这些新值附加到一个新列表中。假设我有一个列表,Python 列表返回的值多于预期值,python,list,Python,List,我有一个由两个值组成的列表,然后我将每个值乘以一个整数,直到两个元素都变成整数,并将这些新值附加到一个新列表中。假设我有一个列表,[0.5,1],应该发生的是,我将每个列表乘以2,得到1和2,并将它们附加到一个新的列表[1,2]。对于我编写的代码,我在新列表中得到了四个值(!),而我只得到了两个值,错误在代码中的什么地方 u=1 newlist = [1, 0.5] alist = [] while True: cont = True
[0.5,1]
,应该发生的是,我将每个列表乘以2,得到1和2,并将它们附加到一个新的列表[1,2]
。对于我编写的代码,我在新列表中得到了四个值(!),而我只得到了两个值,错误在代码中的什么地方
u=1
newlist = [1, 0.5]
alist = []
while True:
cont = True
for value in newlist:
w = value*u
rounded = round(w)
alist.append(rounded)
if not (abs(rounded - w)<=0.1):
cont = False
if cont:
break
u+=1
u=1
新列表=[1,0.5]
alist=[]
尽管如此:
cont=真
对于newlist中的值:
w=值*u
圆形=圆形(w)
列表附加(四舍五入)
如果不是(abs(圆角-w)看起来您应该在循环中清除alist
内部,否则通过for
循环的每个运行都将len(newlist)
项附加到alist
中,而不删除alist
的先前元素
u = 1
newlist = [1, 0.5]
while True:
alist = []
cont = True
for value in newlist:
w = value*u
rounded = round(w)
alist.append(rounded)
if not abs(rounded - w) <= 0.1:
cont = False
if cont:
break
u += 1
>>> alist
[2.0, 1.0]
u=1
新列表=[1,0.5]
尽管如此:
alist=[]
cont=真
对于newlist中的值:
w=值*u
圆形=圆形(w)
列表附加(四舍五入)
如果不是abs(四舍五入-w)>>
[2.0, 1.0]
我在遵循您的代码时有点困难,这里,您可以这样做:
vals = [1,0.5]
i=1
while 1:
if (vals[0] * i) % 1.0 == 0:
if (vals[1] * i) % 1.0 == 0:
print i
vals[0] = vals[0]*i
vals[1] = vals[1]*i
print vals
break
i+=1
得到四个值的原因是,在几个循环过程中使用同一个列表,并且不断向该列表中添加元素。此外,代码中有几个错误,我认为如果我向您展示一个工作版本,您可以找出它们,这会更简单:
u = 1
newlist = [1, 0.5]
alist = []
while True:
cont = True
alist = []
for value in newlist:
w = value*u
if int(w) != w:
cont = False
break
alist.append(int(w))
if cont:
break
u += 1
使用函数可以使事情更容易理解
def nearly_int(x):
return abs(x - round(x)) < 0.1
def find_multiple(a, b):
u = 1
while not nearly_int(a * u) or not nearly_int(b * u):
u += 1
return [round(a * u), round(b * u)]
newlist = [1, 0.5]
alist = find_multiple(*newlist)
def近_int(x):
回位abs(x-圆形(x))<0.1
def查找多个(a、b):
u=1
虽然不接近整数(a*u)或不接近整数(b*u):
u+=1
返回[第一轮(a*u),第二轮(b*u)]
新列表=[1,0.5]
alist=查找多个(*newlist)
谢谢大家,'就像F.J.说的,我只是简单地把alist放在while循环中,它工作得非常完美。令人惊讶的是,这样细微的更改能给你的程序带来多大的变化。再次感谢,非常感谢!