Списки нарезки для получения только четверти из них одинаковой длины - PullRequest
1 голос
/ 08 июня 2019

У меня есть список с длинами A.Есть ли способ использовать нарезку, чтобы взять только каждое четвертое значение, но сохранить его длину?Например, если это мой список:

A = [0,1,2,3,4,5,6,7,8....]

Я хочу использовать нарезку для получения:

A = [0,0,0,0,4,4,...]

Использование [::4] делает работу для получения каждого четвертого значения, но без других значений, которые я хочу.

Ответы [ 3 ]

2 голосов
/ 08 июня 2019

Если у вас есть:

A = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

Тогда вы можете сделать:

>>> [v for v in A[::4] for _ in range(4)]
[0, 0, 0, 0, 4, 4, 4, 4, 8, 8, 8, 8, 12, 12, 12, 12]
>>> 

Я должен отметить, что это округляет длину списка результатов до кратного 4, так что вы всегдаполучить 4 от каждого значения, включенного в результат.Если вы хотите удалить дополнительные значения в конце, вы можете добавить [:len(A)] в конец.

1 голос
/ 08 июня 2019

вы могли бы сделать:

A = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
repeatedA = [ A[(i//4) * 4 ] for i in range(len(A))]

i//4 здесь позволяет получить коэффициент деления индекса на 4, тогда (i//4) * 4 позволяет нам найти ближайшее кратное от 4 до i меньше i, поэтому здесь 1,2 , 3 не делители на 4, но 0, который является ближайшим к ним кратным, то же самое с 5,6, а 7, 4 - это ближайший кратный (учитывая, что он всегда должен быть меньше любого из них), это эквивалентно i - i%4, что позволяет округлить i до ближайшего делителя 4, учитывая, что i = 4* (i//4 ) + 4%i

0 голосов
/ 08 июня 2019

Этот код печатает элементы A, если их индекс остатка от деления на 4 равен 0.

Вместо i%4==0 вы можете ввести i%4==1 или 2 или 3, если вам нужно другое смещение.

A = [0,1,2,3,4,5,6,7,8,9,10,11,12]
print ([A[i] if i%4==0 else 0 for i in range (len(A))])

[0, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 12]

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

print ( [A[i//4*4] for i in range (len(A))])

[0, 0, 0, 0, 4, 4, 4, 4, 8, 8, 8, 8, 12]
...