Изменение определенных индексов в списке - PullRequest
0 голосов
/ 30 июня 2018

Скажите, у меня был список:

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]

Можно ли как-нибудь убрать первые 4 значения из списка, сделайте их:

[4, 2, 2, 4]

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

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

и делайте все это без составления списка

[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

в начале.

Также, если возможно, вы можете сделать цикл, чтобы сделать это для всех 4 доступных значений.

Так что теперь список выглядит так:

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

Ответы [ 7 ]

0 голосов
/ 07 июля 2018

Учитывая список чисел, которые вы хотите заменить первую часть lis на:

replace_lis = [4, 2, 2, 4]

Вы можете выполнить итерацию по длине replace_lis и заполнить места индекса соответственно в lis:

for i in range(len(replace_lis)):
    if i < len(lis):
        lis[i] = replace_lis[i]

i < len(lis) - это если replace_lis может быть больше lis. Если шансов на это нет, вы можете смело опустить это заявление if.

0 голосов
/ 07 июля 2018

Вот ваш оригинальный список:

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]

, и вы хотите заменить первые 4 элемента на: [4, 2, 2, 4]

Давайте присвоим новым значениям новую переменную. Давайте назовем это обновлением. Итак:

update = [4, 2, 2, 4]

Вот ваш код:

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]
update = [4, 2, 2, 4]

for i in range(0, len(update)):
     lis[i] = update[i]

print(lis) 
0 голосов
/ 01 июля 2018

Другим решением было бы сделать следующее:

По первому вопросу:

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]

ins = [4, 2, 2, 4]

lis[:len(ins)] = ins

print(lis)

Выход:

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

Ваш второй вопрос:

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]

lis = ins * int(len(lis) / len(ins))

print(lis)

Выход:

[4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4]
0 голосов
/ 30 июня 2018
def list_function(original_list, list_of_value_to_subst):
    original_list[:len(list_of_value_to_subst)]=list_of_value_to_subst

    print (original_list)

    subst_list = list(map(int, list_of_value_to_subst * (len(original_list) // len(list_of_value_to_subst))))

    print (subst_list)


lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]
list_of_value_to_subst=[4, 2, 2, 4]

list_function(lis, list_of_value_to_subst)

выход:

[4, 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4]
0 голосов
/ 30 июня 2018

Использование itertools.cycle и itertools.islice:

from itertools import cycle, islice

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]

out = list(map(int, islice(cycle('4224'), len(lis))))
print(out)

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

Или более простым способом (без импорта):

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]

out = list(map(int, '4224' * (len(lis) // 4)))
print(out)

# [4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4]
0 голосов
/ 30 июня 2018
lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]
fill = [4, 2, 2, 4]
for i in range(0, len(lis), len(fill)):
    lis[i : i + len(fill)] = fill
print(lis)

Это выводит:

[4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4]
0 голосов
/ 30 июня 2018

Просто сделай так:

lis1 = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]
# change first 4 index
lis1[:4] = 4,2,2,4
print(lis1)
# [4, 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]    

lis2 = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]
# change every 4 index in loop
for i in range(0,len(lis2),4):
    lis2[i:i+4] = 4,2,2,4
print(lis2)
# [4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...