我想将列表l
重新排列成列表n
列表,其中n
是列数。将python列表重新排列为n个列表,列
例如,
l = [1,2,3,4,5,6,7,8,9,10]
n = 4
==> [[1,5,9],[2,6,10],[3,7][4,8]]
是否有人可以帮助我的算法?随意使用任何可用的python awesomeness;我敢肯定,一些很酷的机制很适合这个,我想不起来。
PS示例列表恰好是从1开始的有序数字。这不是我的实际场景。
我想将列表l
重新排列成列表n
列表,其中n
是列数。将python列表重新排列为n个列表,列
例如,
l = [1,2,3,4,5,6,7,8,9,10]
n = 4
==> [[1,5,9],[2,6,10],[3,7][4,8]]
是否有人可以帮助我的算法?随意使用任何可用的python awesomeness;我敢肯定,一些很酷的机制很适合这个,我想不起来。
PS示例列表恰好是从1开始的有序数字。这不是我的实际场景。
在Python中确实有一个很酷的机制:切片的三参数形式,其中最后一个参数是步长。
>>> l = [1,2,3,4,5,6,7,8,9,10]
>>> n = 4
>>> [l[i::n] for i in xrange(n)]
[[1, 5, 9], [2, 6, 10], [3, 7], [4, 8]]
下面的函数的确要达到什么样的:
def rearrange(seq,n):
return [[v for i,v in enumerate(seq[x:]) if i%n==0] for x in xrange(len(seq))][:n]
l = [1,2,3,4,5,6,7,8,9,10]
n = 4
def f(l,n):
A = []
[A.append([]) for i in xrange(n)]
[ A [(i - 1) % n].append(i) for i in l]
return A
print f(l,n)
[[1,5,9],[2,6,10],[3,7],[4, 8]]
写Python不是代码高尔夫的游戏,为了可读性的原因,不要害怕使用多行代码。
l = [1,2,3,4,5,6,7,8]
def split_into_columns(input_list, num_of_cols=3):
retval = [ [] for _ in xrange(num_of_cols)] # build 3 columns
for i in xrange(len(input_list)): # iterate through original list
retval[i%num_of_cols].append(input_list[i]) # place in the "modulo 3" column
return retval
# here's a compressed, less readable version of that for-loop
#[retval[i%3].append(input_list[i]) for i in xrange(len(input_list))]
#return retval
print split_into_columns(l, 3)
我实际上正在尝试使用那个(第三个slice参数),但最终会出现一些更复杂的工作。谢谢! –