Сложное поведение со списками - PullRequest
0 голосов
/ 15 декабря 2018

Мне нужно сделать какой-то странный и сложный расчет со списками.Я пытался, и я пытался запустить его, но он сталкивается с ошибкой.лучше сказать, довольно трудно добиться такого поведения.

У меня есть следующие списки.

A = [1,1,1,2,2,2]
B = [3,3]          # B list is length of numbers 1 and 2.
E = [10,10]
C = 1
D = []

У меня есть этот код, но он на самом деле не работает:

 for k in B:
    for j in E:
        for i in range(len(A)-k):
            print(i)
            if i == 0:
                D.append(C)
            else:
                D.append(C+(E[k]))
            print(D)

Объяснение для достижения результатов.

Я хочу иметь цикл for, который позволяет добавлять значения в мой пустой список, который просматривает первые 3 значения в начале списка A с помощьювзяв B[0]= 3, do something with first 3 values.И смотрит на B[1]= 3, т.е.возьмите последние 3 значения в списке A, затем do something to them и добавьте их все, чтобы очистить список.

Первые 3 значения:

Когда выбрано A[0], я хочу иметь D[0] = C, а в случае A[1] и A[2], B list должно быть B[1]= C + 1*E[0] и B[2]= C + 2*E[0].

Последние 3 значения:

Когда выбрано A[3], я хочу иметь D[3] = C, и вcase A[4] и A[5], B list должно быть B[4]= C + 1*E[1] и B[5]= C + 2*E[1].

Ожидаемый результат:

[1,11,21,1,11,21]

Я хочу получитьэто программно, в случае изменения списка A на A = [1,1,2,2] и B = [2,2] или что-то еще.

1 Ответ

0 голосов
/ 16 декабря 2018

Инициализация ваших списков

A = [1,1,1,2,2,2]
B = [3,3]          # B list is length of numbers 1 and 2.
E = [10,10]
C = 1
D = []

мы хотим подсчитать в A начиная с первого раза с 0, следующего раза с предыдущего запуска плюс количество предметов, которые мы использовали, следовательно, мы инициализируем start

start = 0 

Запускаем цикл для элементов b из B, считая их в k, извлекаем из A нужные нам элементы и обновляем начальную позицию дляследующий проход

for k, b in enumerate(B): 
    sub_A = A[start:start+b] 
    start = start+b 

Теперь внутренний цикл для элементов a подсписка, считая их с помощью i, обратите внимание, что для первого элемента i равен нулю, и поэтому мы добавляем C+0*E[k]=C, по запросу

    for i, _ in enumerate(sub_A): 
        D.append(C+i*E[k]) 

Чтобы увидеть все без моих комментариев

start = 0 
for k, b in enumerate(B): 
    sub_A = A[start:start+b] 
    start = start+b 
    for i, _ in enumerate(sub_A): 
        D.append(C+i*E[k]) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...