Python 将头部和尾部在列表中移动1步
如果我有一个大列表A=[1,2,3,4,5,6,7,8,9,10] 我有3个元素的子列表,例如 B=[1,2,3] 我想根据A列表向前滑动1步,使B变为[2,3,4]-有没有一个平滑的方法可以做到这一点?或者我只需要弹出B的第一个元素,然后从A附加适当的元素 谢谢 编辑:我的答案 B=A[i:i+3] 如果你想通过“i”步向前看,可以增加“i”。你可以做一个标记: B可以是a的前3个元素的视图。当需要滑动时,将a向左旋转Python 将头部和尾部在列表中移动1步,python,list,syntax,Python,List,Syntax,如果我有一个大列表A=[1,2,3,4,5,6,7,8,9,10] 我有3个元素的子列表,例如 B=[1,2,3] 我想根据A列表向前滑动1步,使B变为[2,3,4]-有没有一个平滑的方法可以做到这一点?或者我只需要弹出B的第一个元素,然后从A附加适当的元素 谢谢 编辑:我的答案 B=A[i:i+3] 如果你想通过“i”步向前看,可以增加“i”。你可以做一个标记: B可以是a的前3个元素的视图。当需要滑动时,将a向左旋转 A Out[71]: deque([1, 2, 3, 4, 5, 6, 7
A
Out[71]: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
from itertools import islice #deques do not support slicing notation
B = list(islice(A,3))
B
Out[74]: [1, 2, 3]
A.rotate(-1)
B = list(islice(A,3))
B
Out[77]: [2, 3, 4]
您可以制作一个deque:
B可以是a的前3个元素的视图。当需要滑动时,将a向左旋转
A
Out[71]: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
from itertools import islice #deques do not support slicing notation
B = list(islice(A,3))
B
Out[74]: [1, 2, 3]
A.rotate(-1)
B = list(islice(A,3))
B
Out[77]: [2, 3, 4]
你可以做得更一般一些
>>> A = [1,2,3,4,5,6,7,8,9,10]
>>> for B in (A[i - 3: i] for i in range(3, len(A) + 1)):
... print B
...
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]
[6, 7, 8]
[7, 8, 9]
[8, 9, 10]
你可以做得更一般一些 使用itertools:
>>> A = [1,2,3,4,5,6,7,8,9,10]
>>> for B in (A[i - 3: i] for i in range(3, len(A) + 1)):
... print B
...
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]
[6, 7, 8]
[7, 8, 9]
[8, 9, 10]
isliceA,x,None使用itertools在[x:]上创建迭代器。:
isliceA,x,None在A[x:]上创建迭代器。B=A[1:4]是你想要的吗?否则我不确定你的意思…@JonClements是的,所以基本上B=A[I:3+I],其中I=0,那么块的大小将是3个元素。如果我想移动,我可以用1增加'I'。ThxIs B=A[1:4]你在追求什么?否则我不确定你的意思…@JonClements是的,所以基本上B=A[I:3+I],其中I=0,那么块的大小将是3个元素。如果我想移动,我可以用1增加'I'。ThxOkay,一个我想要的词,谢谢。这比B=A[i:3+i]快吗,不知道:的名字叫什么。嗯,那Out[71],74,77是什么呢?Out就是我的解释器ipython,标记输出行号。至于更快,我高度怀疑您的应用程序是否会受到这两种操作的限制,这两种操作都非常快。在上下文中使用最有意义的词。好的,这就是我想要的“谢谢”这个词。这比B=A[i:3+i]快吗,不知道:的名字叫什么。嗯,那Out[71],74,77是什么呢?Out就是我的解释器ipython,标记输出行号。至于更快,我高度怀疑您的应用程序是否会受到这两种操作的限制,这两种操作都非常快。在上下文中使用最有意义的东西。
>>> from itertools import islice, izip
>>> A = [1,2,3,4,5,6,7,8,9,10]
>>> for l in izip(*(islice(A, x, None) for x in xrange(3))):
... print list(l)
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]
[6, 7, 8]
[7, 8, 9]
[8, 9, 10]