Ars*_*tic 6 python iterator list
给出一个输入列表
l = [1 2 3 4 5 6 7 8 9 10]
Run Code Online (Sandbox Code Playgroud)
和组大小grp和步骤
grp = 3; step = 2
Run Code Online (Sandbox Code Playgroud)
我想返回一份清单.注意最后的重复
1 2 3
3 4 5
5 6 7
7 8 9
9 10 1
Run Code Online (Sandbox Code Playgroud)
或者如果
grp= 4; step = 2
Run Code Online (Sandbox Code Playgroud)
输出应该是
1 2 3 4
3 4 5 6
5 6 7 8
7 8 9 10
Run Code Online (Sandbox Code Playgroud)
这是我提出的代码,它没有做循环的事情.但是想知道是否有更小或更简单的解决方案
def grouplist(l,grp,step):
oplist = list()
for x in range(0,len(l)):
if (x+grp<len(l)):
oplist.append(str(l[x:x+grp]))
return oplist
Run Code Online (Sandbox Code Playgroud)
您可以利用 xrange 或 range 中的步骤函数,具体取决于您使用的 python 版本。然后像这样按列表的长度进行 mod 回绕
import sys
def grouplist(l,grp,step):
newlist=[]
d = len(l)
for i in xrange(0,len(l),step):
for j in xrange(grp):
newlist.append(l[(i+j)%d])
sys.stdout.write(str(l[(i+j)%d]) + ' ')
print
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print grouplist(l,3,2)
1 2 3
3 4 5
5 6 7
7 8 9
9 10 1
[1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 9, 9, 10, 1]
print grouplist(l,4,2)
1 2 3 4
3 4 5 6
5 6 7 8
7 8 9 10
9 10 1 2
[1, 2, 3, 4, 3, 4, 5, 6, 5, 6, 7, 8, 7, 8, 9, 10, 9, 10, 1, 2]
Run Code Online (Sandbox Code Playgroud)