Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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_Python 3.x_List - Fatal编程技术网

Python 保持列表中的值不断增长并保持列表大小

Python 保持列表中的值不断增长并保持列表大小,python,python-3.x,list,Python,Python 3.x,List,几天前,我一直在尝试多种方法和方法,以在Python中获得所需的列表行为。我需要构造一个方法,在保持列表大小的同时分配和更改列表中的值。让我解释一下 我有这样一个代码。 A = [1,1,1,1,1] B=[] for i in range(0,len(A)): for j in range(1,3): val = j*2*A[i] B.insert(i,val) print(B) 我得到的结果: [2.0] [4.0] [2.0, 4.0]

几天前,我一直在尝试多种方法和方法,以在Python中获得所需的列表行为。我需要构造一个方法,在保持列表大小的同时分配和更改列表中的值。让我解释一下

我有这样一个代码。

A = [1,1,1,1,1]
B=[]

for i in range(0,len(A)):
    for j in range(1,3):
        val = j*2*A[i]
        B.insert(i,val)
    print(B)
我得到的结果:

[2.0]
[4.0]
[2.0, 4.0]       #<------- Not need it 
[2.0, 2.0]
[4.0, 2.0]       #<------- Not need it 
[4.0, 4.0]
[2.0, 1.0, 4.0]  #<------- Not need it 
[2.0, 2.0, 4.0]  #<------- Not need it 

IndexError: list index out of range
我想做什么

在本例中,取A-list的第一个值
int 1
。然后通过增加一个范围函数进行一些计算
val=1*2*A[0]=2并在B列表中设置,然后继续
val=2*2*A[0]=4并在B列表中设置。然后下一步
val=1*2*A[1]=2
val=2*2*A[1]=4
。我希望有这样的输出

[2]
[4]
[2,2]
[4,4]
...............
更新:

[2.0]
[4.0]
[2.0, 4.0]       #<------- Not need it 
[2.0, 2.0]
[4.0, 2.0]       #<------- Not need it 
[4.0, 4.0]
[2.0, 1.0, 4.0]  #<------- Not need it 
[2.0, 2.0, 4.0]  #<------- Not need it 

IndexError: list index out of range
我已经更新了一个代码示例,这次添加了一个for循环,用于构建
列表a
,但它遇到了一些问题。我真的不明白为什么它会运行错误
列表索引超出范围。
这很清楚,当
len(列表a)
4
len(列表B)
变为
5
。它不应
列表B
超出范围

A = []
B = [] 
for n in range(1,11):
    A.append(n/n)
    for i in range(0,len(A)):
        B.insert(i, A[i])
        for j in range(1,3):
            for k, _ in enumerate(B):
                B[k] = j*2*A[k]
                print(B)
我得到的输出:

[2.0]
[4.0]
[2.0, 4.0]       #<------- Not need it 
[2.0, 2.0]
[4.0, 2.0]       #<------- Not need it 
[4.0, 4.0]
[2.0, 1.0, 4.0]  #<------- Not need it 
[2.0, 2.0, 4.0]  #<------- Not need it 

IndexError: list index out of range

我真的不知道如何解决这类问题,我非常感谢您的帮助……

您应该将
insert
函数放在外循环中,否则您不仅要为
A
中的每个元素插入,还要为
范围(1,3)

i、 e

或者更好的Python:

A = [1, 1, 1, 1, 1]
B = []

for i, elmnt in enumerate(A):
    B.insert(i, elmnt)
    for j in range(1, 3):
        B[i] = j * 2 * elmnt
    print(B)
但是,如果在下一步中通过
val=2*2*A[0]=4将其覆盖,为什么要将
val=1*2*A[0]=2
写入B[0]中呢?
那没有道理


编辑:
关于预期行为的最新协议:

A = [1, 1, 1, 1, 1]
B = []

for i, elmnt in enumerate(A):
    B.insert(i, elmnt)
    for j in range(1, 3):
        for k, _ in enumerate(B):
            B[k] = j * 2 * elmnt
        print(B)
[2]
[4]
[2, 2]
[4, 4]
[2, 2, 2]
[4, 4, 4]
[2, 2, 2, 2]
[4, 4, 4, 4]
[2, 2, 2, 2, 2]
[4, 4, 4, 4, 4]
…或者使用numpy,一次更改数组的所有值更容易:

import numpy as np
A = np.array([1, 1, 1, 1, 1], 'int')
B = np.array([], 'int')

for i, elmnt in enumerate(A):
    B = np.append(B, elmnt)
    for j in range(1, 3):
        B[:] = j * 2 * elmnt
        print(B)

[2]
[4]
[2 2]
[4 4]
[2 2 2]
[4 4 4]
[2 2 2 2]
[4 4 4 4]
[2 2 2 2 2]
[4 4 4 4 4]

谢谢你的快速回复。关于你的问题为什么
val=1*2*A[0]=2
,因为在这些代码行下面还有一些其他的条件语句,这里没有显示,它将取
[2]
,检查条件是否匹配,如果不满足条件,它将中断并退出for循环,继续覆盖到结构良好的
val=2*2*A[0]=4
。但仍然没有达到预期的行为。运行时,获取以下内容,
[2],[4],**4**,2],[4,4]
,希望为第三个结果获取一个值作为
[2,2]
,这是一种解决方法吗?我想这是上一轮的,嗯,我想还是有一些误解。。。是的,它来自上一次运行,但是这次运行已经完成,所以它的数据保持不变。这不是我们想要的。。。我不得不承认我不明白。你构造的方法是有用的,很棒的,最后一块丢失了。我认为它可能是,我们还需要一个范围函数和for-loop。让我们一步一步地考虑它:对于A(和B)中的第一个元素,j将变成第一个1,然后变成2。这意味着,元素将先是2,然后是4。但是,据我所知,下一个元素被处理,B现在有两个元素:首先是[4,2],然后是[4,4]。然后是第三个:首先是[4,4,2],然后是[4,4,4]。。。。。。。。。。为什么“完成的4s”要改回2?为什么“我得到的结果”是图像?代码中没有任何内容表明它正在创建图像。(这也适用于你之前的问题,你在那里做了同样奇怪的事情。为什么要把文本作为文本的图像包含进来?我似乎缺少的明显优势是什么?)你是什么意思?我应该把它添加为文本而不是图像吗?:-)是的,你应该。这是一种无法治愈的疾病,因此,人们将代码或数据作为图像发布。我不得不承认我也没有得到优势。。。问题是,从长期用户的角度来看,这有时会让人感觉“他们永远不会学习,为什么他们会一遍又一遍地学习!”——但“他们”每次都是不同的人,他们学习,但其他人也会这样做……然而,同样不可理解的是:这个结果不是上面代码的结果。因此,如果我运行代码,我不会得到这个结果(既不是作为图像,也不是作为文本…:-),显然这是真的。我已经修正了输出。
import numpy as np
A = np.array([1, 1, 1, 1, 1], 'int')
B = np.array([], 'int')

for i, elmnt in enumerate(A):
    B = np.append(B, elmnt)
    for j in range(1, 3):
        B[:] = j * 2 * elmnt
        print(B)

[2]
[4]
[2 2]
[4 4]
[2 2 2]
[4 4 4]
[2 2 2 2]
[4 4 4 4]
[2 2 2 2 2]
[4 4 4 4 4]