Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表返回的值多于预期值_Python_List - Fatal编程技术网

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循环中,它工作得非常完美。令人惊讶的是,这样细微的更改能给你的程序带来多大的变化。再次感谢,非常感谢!