【发布时间】:2019-06-08 10:38:34
【问题描述】:
我有一个长度为A 的列表。有没有办法使用切片来获取每四个值但保持它的长度?例如,如果这是我的清单:
A = [0,1,2,3,4,5,6,7,8....]
我想使用切片接收:
A = [0,0,0,0,4,4,...]
使用[::4] 可以获取每四个值,但没有我想要的其他值。
【问题讨论】:
我有一个长度为A 的列表。有没有办法使用切片来获取每四个值但保持它的长度?例如,如果这是我的清单:
A = [0,1,2,3,4,5,6,7,8....]
我想使用切片接收:
A = [0,0,0,0,4,4,...]
使用[::4] 可以获取每四个值,但没有我想要的其他值。
【问题讨论】:
如果你有:
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)]。
【讨论】:
你可以这样做:
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 相同,7, 4 是最接近的倍数(因为它应该总是小于它们中的任何一个),它是相当于i - i%4,它允许我们将i向下舍入到最接近的除数4,因为i = 4* (i//4 ) + 4%i
【讨论】:
如果 A 的元素除以 4 后的索引残差等于 0,则此代码将打印它们。
如果您需要不同的偏移量,您可以输入 i%4==1 或 2 或 3,而不是 i%4==0。
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]
【讨论】: