我有一个被打乱的列表,然后我想把它分成6个子列表,每个子列表有6个元素(原始列表中有26个元素)。我知道这需要通过范围创建一个子列表来完成(例如。0-5,6-11等)但是找不到是怎么回事。它应该是非常直接的!到目前为止,我的代码如下:
import random
characters = [0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
random.shuffle(characters)发布于 2013-01-12 01:23:28
你可以使用类似这样的东西:
>>> import string
>>> import random
>>>
>>> chars = list(string.uppercase + string.digits)
>>> random.shuffle(chars)
>>>
>>> [chars[i:i + 6] for i in range(0, len(chars), 6)]
[['U', 'I', 'X', '6', 'Q', 'L'],
['Y', 'J', 'C', 'S', '8', '0'],
['A', 'R', '5', 'F', 'T', 'W'],
['N', 'B', 'E', '2', '1', 'V'],
['9', 'K', 'O', 'P', '7', '4'],
['G', 'M', 'Z', '3', 'D', 'H']]chars[i:i + 6]创建一个长度为i.range(0, len(chars), 6)的子列表,该列表从位置开始,以6range(0,len(chars),6) 0,6,12,18,24,30为增量在从0到len(chars)的范围内循环
发布于 2013-01-12 01:23:29
使用itertools.islice()
In [246]: characters = [0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
In [247]: it=iter(characters)
In [248]: [list(islice(it,6)) for _ in range(6)]
Out[248]:
[[0, 1, 2, 3, 4, 5],
[6, 7, 8, 9, 'A', 'B'],
['C', 'D', 'E', 'F', 'G', 'H'],
['I', 'J', 'K', 'L', 'M', 'N'],
['O', 'P', 'Q', 'R', 'S', 'T'],
['U', 'V', 'W', 'X', 'Y', 'Z']]iter(characters):创建characters列表的迭代器。
islice(iterator,len):返回len=6迭代器的片段。Islice对象本身就是一个迭代器,因此,您需要将islice对象传递给list()以获取其内容。
传入range的6可以通过以下方式获取:
In [2]: int(len(characters)/6)
Out[2]: 6发布于 2013-01-12 01:25:17
基于itertools grouper配方
依赖于itertools.izip_longest和自身的增量或迭代器
>>> list(izip_longest(*[iter(characters)] * 6))
[(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 'A', 'B'), ('C', 'D', 'E', 'F', 'G', 'H'), ('I', 'J', 'K', 'L', 'M', 'N'), ('O', 'P', 'Q', 'R', 'S', 'T'), ('U', 'V', 'W', 'X', 'Y', 'Z')]https://stackoverflow.com/questions/14283354
复制相似问题