2013-01-11 63 views
1

我有一個列表被混洗,然後我希望它被分解成6個子元素每個6個元素(原有列表中有26個元素)。我知道它需要通過範圍創建一個子列表(例如,0-5,6-11等),但無法找到如何。它應該非常直截了當!這裏是我到目前爲止的代碼:Python子列表創建

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) 

回答

1

你可以使用這樣的事情:

>>> 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位置長度6的子列表。
  • range(0, len(chars), 6)環路在範圍從0到的6增量len(chars)

    >>> range(0, len(chars), 6) 
    [0, 6, 12, 18, 24, 30] 
    
1

使用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()以獲取其內容。

In [2]: int(len(characters)/6) 
Out[2]: 6 
+0

1:

6傳遞給range獲得人。你能否澄清一下如何訪問每個子列表? – kosa

1

基於itertools石斑魚配方

憑藉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')]