Python 保持列表中的值不断增长并保持列表大小
几天前,我一直在尝试多种方法和方法,以在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]
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]