Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将头部和尾部在列表中移动1步_Python_List_Syntax - Fatal编程技术网

Python 将头部和尾部在列表中移动1步

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=[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, 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]