замена и добавление к фрагменту массива в python3 - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу создать фрагмент массива, а затем назначить каждому элементу фрагмента число и затем обновить его в соответствии с указанными индексами.

Например:

[0, 0, 0, 0, 0] --> initial array

Iхочу присвоить 100 первым двум элементам, т.е.

a[0:2] = 100 for j in range(0,2)

, поэтому теперь массив становится

[100, 100, 0, 0, 0]

, если я хочу добавить 100 к первым трем элементам, чтобы массив теперь стал

[200, 200, 100, 0, 0]

как правильно это сделать?Я получаю синтаксическую ошибку для следующего кода:

def arrayManipulation(n, queries):
n = 10
//queries is list of [[starting index, ending index, value to be updated]]
initialArray = [0]*n;
for i in queries:
    firstIndex = i[0]-1
    secondIndex = i[1]
    initialArray[firstIndex:secondIndex] = ((initialArray[j] += i[2]) for j in range(firstIndex, secondIndex))
    print(initialArray)

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Обычный способ - использовать range и цикл.

a = [0, 0, 0, 0]

for i in range(2):
    a[i] = 100

for i in range(3):
    a[i] += 100

print(a) # [200, 200, 100, 0]

Хотя хорошо знать, что Python поддерживает назначение срезов.

a = [0, 0, 0, 0]

a[0:2] = [100, 100]

# To some extent, this even can be done
a[0:3] = map(lambda x: x + 100, a[0:3])

print(a) # [200, 200, 100, 0]
0 голосов
/ 27 сентября 2018

Использовать enumerate здесь. Это позволит вам получить доступ к index s, которые вас интересуют, и присвоить значения или манипулировать ими

l = [0, 0, 0, 0, 0]

for idx, item in enumerate(l[:2]):
    l[idx] = 100

for idx, item in enumerate(l[:3]):
    l[idx] += 100

print(l)

* Примечание: первоначальное назначение может быть выполнено через (@ShadowRanger)

l[:2] = [100] * 2
...