给定一个列表 a,我可以通过以下方式对其进行切片:
a[start:end:step]
然而,这只是线性切片。 例如,我想选择 2 的幂的索引。 不幸的是,这不起作用:
a[slice(2**x for x in range(len(a))]
当需要非线性切片时,有没有办法避免循环?
编辑: 主要是我需要这个来修改列表。例如
a[*non-linear-slicing*] = [*list-with-new-values*]
请您参考如下方法:
你可以使用列表理解:
is_power_of_two = lambda num: num != 0 and ((num & (num - 1)) == 0)
print [item for i, item in enumerate(a) if is_power_of_two(i)]
