在列表中保持增长的价值,并保持列表大小

时间:2018-11-28 07:49:29

标签: 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)

我得到的结果:

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

我想做什么!

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

[2]
[4]
[2,2]
[4,4]
...............

更新

我已经更新了一个代码示例,这次添加了一个for循环来构造list A,但是它遇到了一些问题。我不十分理解为什么它会与 错误 list index out of range.很明显,当len(list A)4时,len(list B)成为5。预计list 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

预期的输出。

[2.0]
[4.0]
[2.0, 2.0]
[4.0, 4.0]
---------------

我真的不知道如何解决此类问题,感谢您的帮助...

1 个答案:

答案 0 :(得分:3)

您应该将insert函数放在外部循环中,否则不仅要插入A中的每个元素,还要插入range(1, 3)中的每个计算步骤

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

for i in range(0,len(A)):
    B.insert(i, A[i])
    for j in range(1,3):
        B[i] = j*2*A[i]
    print(B)

或更好的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 = 1*2*A[0] = 2覆盖val = 2*2*A[0] = 4,为什么还要将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] 写入B [0]?
那没有道理。


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

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]

...或者使用numpy,一次更改数组的所有值会更容易:

def createXmlOutput(...) : Elem =
{
   <something>
     { if (condition == true) <child>{ "my child value if condition would be true" }</child> }
     <otherchild>{ "my other child value" }</otherchild>
   </something>
}