2013-04-13 31 views
0

我有以下listin的Python 3:拆分成列表,甚至地方

['X', 'X', 'X', 'T', '.', '.', '.', '.', 'O', 'O', '.', '.', '.', '.', '.', '.', 'X', 'O', 'X', 'T', 'X', 'X', 'O', 'O', 'O', 'X', 'O', 'X', 'X', 'X', 'O', 'O', 'X', 'O', 'X', '.', 'O', 'X', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', 'O', 'O', 'X', 'X', 'O', 'X', 'X', 'X', 'O', 'X', '.', 'T', 'O', '.', '.', 'O', 'X', 'X', 'X', 'O', '.', '.', 'O', '.', '.', 'O', '.', '.', 'T', '.', '.', '.', 'O', 'X', 'X', 'X', 'X', 'O', '.', '.', '.', '.', 'O', '.', '.', '.', '.', 'O'] 

和后16米的地方,我想它像这样分割:

CASE_1 = ['X', 'X', 'X', 'T', '.', '.', '.', '.', 'O', 'O', '.', '.', '.', '.', '.', '.'] 
CASE_2 = ['X', 'O', 'X', 'T', 'X', 'X', 'O', 'O', 'O', 'X', 'O', 'X', 'X', 'X', 'O', 'O'] 
CASE_3 = ['X', 'O', 'X', '.', 'O', 'X', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'] 
CASE_4 = ['O', 'O', 'X', 'X', 'O', 'X', 'X', 'X', 'O', 'X', '.', 'T', 'O', '.', '.', 'O'] etc 

如何实现这一目标? 感谢

+0

@jamylak同意,这是链接的问题 –

+0

@Lewis的重复:我强烈建议你使用更简单的 - 并明确readabeland maintanable - 实现,如一个我提供。 jamylak的渲染可能有效 - 但我认为它更像是一种有趣的做事方式,而不是实际代码中的有用方式。它在Python实现中不可靠,并且很难理解和维护。 – jsbueno

+2

@jsbueno我的代码非常好:)查看我的回答底下我的回答 – jamylak

回答

3
>>> L = ['X', 'X', 'X', 'T', '.', '.', '.', '.', 'O', 'O', '.', '.', '.', '.', '.', '.', 'X', 'O', 'X', 'T', 'X', 'X', 'O', 'O', 'O', 'X', 'O', 'X', 'X', 'X', 'O', 'O', 'X', 'O', 'X', '.', 'O', 'X', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', 'O', 'O', 'X', 'X', 'O', 'X', 'X', 'X', 'O', 'X', '.', 'T', 'O', '.', '.', 'O', 'X', 'X', 'X', 'O', '.', '.', 'O', '.', '.', 'O', '.', '.', 'T', '.', '.', '.', 'O', 'X', 'X', 'X', 'X', 'O', '.', '.', '.', '.', 'O', '.', '.', '.', '.', 'O'] 
>>> cases = list(zip(*[iter(L)]*16)) 

我就告诉你,这由它打印出来

>>> import pprint 
>>> pprint.pprint(cases, width=400) 
[('X', 'X', 'X', 'T', '.', '.', '.', '.', 'O', 'O', '.', '.', '.', '.', '.', '.'), 
('X', 'O', 'X', 'T', 'X', 'X', 'O', 'O', 'O', 'X', 'O', 'X', 'X', 'X', 'O', 'O'), 
('X', 'O', 'X', '.', 'O', 'X', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'), 
('O', 'O', 'X', 'X', 'O', 'X', 'X', 'X', 'O', 'X', '.', 'T', 'O', '.', '.', 'O'), 
('X', 'X', 'X', 'O', '.', '.', 'O', '.', '.', 'O', '.', '.', 'T', '.', '.', '.'), 
('O', 'X', 'X', 'X', 'X', 'O', '.', '.', '.', '.', 'O', '.', '.', '.', '.', 'O')] 

的例子匹配至于如何工作的:How does zip(*[iter(s)]*n) work in Python?

+0

+1,很好的答案。但我不认为需要'list()':p。 – TerryA

+0

@Haidro它在Python 2中是多余的,但你需要它在Python 3上 – jamylak

+0

啊,那么我的错误。对不起:)。 – TerryA

2

“应该有one--和最好只有一个 - 明显的做法。“

>>> a = ['X', 'X', 'X', 'T', '.', '.', '.', '.', 'O', 'O', '.', '.', '.', '.', '.', '.', 'X', 'O', 'X', 'T', 'X', 'X', 'O', 'O', 'O', 'X', 'O', 'X', 'X', 'X', 'O', 'O', 'X', 'O', 'X', '.', 'O', 'X', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', 'O', 'O', 'X', 'X', 'O', 'X', 'X', 'X', 'O', 'X', '.', 'T', 'O', '.', '.', 'O', 'X', 'X', 'X', 'O', '.', '.', 'O', '.', '.', 'O', '.', '.', 'T', '.', '.', '.', 'O', 'X', 'X', 'X', 'X', 'O', '.', '.', '.', '.', 'O', '.', '.', '.', '.', 'O'] 
>>> b = [a[i: i + 16] for i in range(0,len(a), 16) ] 
>>> from pprint import pprint 
>>> pprint(b, width=400) 
[['X', 'X', 'X', 'T', '.', '.', '.', '.', 'O', 'O', '.', '.', '.', '.', '.', '.'], 
['X', 'O', 'X', 'T', 'X', 'X', 'O', 'O', 'O', 'X', 'O', 'X', 'X', 'X', 'O', 'O'], 
['X', 'O', 'X', '.', 'O', 'X', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'], 
['O', 'O', 'X', 'X', 'O', 'X', 'X', 'X', 'O', 'X', '.', 'T', 'O', '.', '.', 'O'], 
['X', 'X', 'X', 'O', '.', '.', 'O', '.', '.', 'O', '.', '.', 'T', '.', '.', '.'], 
['O', 'X', 'X', 'X', 'X', 'O', '.', '.', '.', '.', 'O', '.', '.', '.', '.', 'O']]