Сохраняйте растущие значения в списке и сохраняйте размер списка - PullRequest
0 голосов
/ 28 ноября 2018

Несколько дней назад я пробовал много способов и способов получить желаемое поведение списка в 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-списка 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]
...............

Обновление:

Я обновил образец кода, на этот раз для цикла добавлен цикл 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 голосов
/ 28 ноября 2018

Вы должны поместить функцию 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 в B [0], если вы все равно перезапишите его на следующем шаге на 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]

... или с 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...