为说明这个问题,我们假设我在Python中有以下列表,其中X是任意大的自然数:
l = [1, 2, 3, 4, 5, 6, 7, ... X]
并且我想对其进行切片,以便按照斐波那契数列的顺序选择列表的第一,第二,第三,第五,第八等元素。例如。类似于以下操作:
l_prime = [l[0], l[1], l[2], l[4], l[7], l[11], ...]
我对l[start:end:step_size]
的Python索引表示法感到满意,并且我想知道是否存在一种方法可以在此表示法范式中为Python列表建立索引,并且步长在将每个索引添加到我的新索引后会有所不同切片列表。或者,我是否需要使用其他技术来解决之前提出的问题?
答案 0 :(得分:2)
如果可以使用numpy,这真的很简单。
l = np.array([1, 2, 3, 4, ..., X])
fibs = np.array([0, 1, 2, 4, 7])
print(l[fibs])
答案 1 :(得分:2)
如果要从列表中检索多个元素,可以使用函数itemgetter()
:
from operator import itemgetter
lst = [1, 2, 3, 4, 5, 6, 7, 8]
ind = [0, 0, 1, 2, 4, 7]
itemgetter(*ind)(lst)
# (1, 1, 2, 3, 5, 8)
答案 2 :(得分:1)
您可以首先编写一个生成斐波那契数字的生成器:
def fibs():
prev1 = 1
prev2 = 2
yield prev1
yield prev2
while True:
prev1 += prev2
prev2 += prev1
yield prev1
yield prev2
然后您可以使用列表推导将每个斐波那契数字fib
映射到l[fib - 1]
:
import itertools
result = [l[fib - 1] for fib in itertools.takewhile(lambda x: x <= len(l), fibs())]