2024-03-29 07:56:32 发布
网友
我可以利用列表索引。。。你知道吗
lst =[1,2,3,4,5,6] [ [lst[i] , lst[i+1]] for i in range( len(lst) - 1 )]
或:
lst =[1,2,3,4,5,6] for i in range(len(lst)-1): entities.append([lst[i],lst[i+1]])
但是有更聪明的方法吗?也许用迭代器?表现如何?你知道吗
对于一般的解决方案(因为您要求成对、三元组等),请使用^{}:
from itertools import tee def adjacent_tuples(iterable, n=2): iterators = tee(iterable, n) for i, iterator in enumerate(iterators): for j in range(i): next(iterator) return zip(*iterators)
这将使用最少的内存,并适用于任意长度的元组:
>>> list(adjacent_tuples(range(8), 4)) [(0, 1, 2, 3), (1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6), (4, 5, 6, 7)]
您在这里得到了一些聪明的答案,但我想建议,最明显的方法就是使用内置的切片索引。像这样:
def gen_k_slices(seq, k): for i in range(len(seq) - k + 1): yield seq[i:i+k]
下面是一个小试驾:
TEST = [1, 2, 3, 4, 5, 6] for k in range(8): print("k={} -> {}".format(k, list(gen_k_slices(TEST, k))))
及其输出:
k=0 -> [[], [], [], [], [], [], []] k=1 -> [[1], [2], [3], [4], [5], [6]] k=2 -> [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]] k=3 -> [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]] k=4 -> [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]] k=5 -> [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6]] k=6 -> [[1, 2, 3, 4, 5, 6]] k=7 -> []
我也不喜欢k=0的结果;-)
您可以使用zip():
zip()
>>> lst = [1,2,3,4,5,6] >>> list(zip(lst[:-1],lst[1:])) [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)] >>> list(zip(lst[:-2],lst[1:-1],lst[2:])) [(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]
对于一般的解决方案(因为您要求成对、三元组等),请使用^{} :
这将使用最少的内存,并适用于任意长度的元组:
您在这里得到了一些聪明的答案,但我想建议,最明显的方法就是使用内置的切片索引。像这样:
下面是一个小试驾:
及其输出:
我也不喜欢k=0的结果;-)
您可以使用
zip()
:相关问题 更多 >
编程相关推荐