将一个字符串拆分为3个组

use*_*607 5 python python-3.x

什么是最正确的分裂为三人组的Pythonic方式?我已经看到了这个答案/sf/answers/196078221/但是我需要它才能正确对齐.优选地,没有进口的简单有效的单线.

  • '123456789'= ['123','456','789']
  • '12345678'= ['12','345','678']
  • '1234567'= ['1','234','567']

Jon*_*nts 13

另一种方式,不确定效率(如果它们已经是数字而不是字符串会更好),但是另一种方式是在2.7+中做到这一点.

for i in map(int, ['123456789', '12345678', '1234567']):
    print i, '->', format(i, ',').split(',')

#123456789 -> ['123', '456', '789']
#12345678 -> ['12', '345', '678']
#1234567 -> ['1', '234', '567']
Run Code Online (Sandbox Code Playgroud)


luc*_*asg 5

简单(从链接中的答案迭代):

[int(a[::-1][i:i+3][::-1]) for i in range(0, len(a), 3)][::-1]

说明:a[::-1]是反向列表a 我们将用切片组成反转.

第一步:反转清单

 a           =   a[::-1]
'123456789' - > '987654321'
Run Code Online (Sandbox Code Playgroud)

第二步:切三分之一的部分

 a[i]           =   a[i:i+3]
 '987654321'    ->  '987','654','321'
Run Code Online (Sandbox Code Playgroud)

第三步:再次反转列表以按递增顺序显示数字

 a[i]           =  int(a[i][::-1])
 '987','654','321' -> 789, 654, 123
Run Code Online (Sandbox Code Playgroud)

最后一步:反转整个列表

 a           =   a[::-1]
 789, 456, 123 -> 123, 456, 789
Run Code Online (Sandbox Code Playgroud)

额外:功能性合成糖

当你有适当的函数名称时,它更容易调试

invert = lambda a: a[::-1]
slice  = lambda array, step : [ int( invert( array[i:i+step]) ) for i in range(len(array),step)  ]

answer = lambda x: invert ( slice ( invert (x) , 3 ) )
answer('123456789')
#>> [123,456,789]
Run Code Online (Sandbox Code Playgroud)


Fab*_*nze 5

这是我想出的最好的:

[a[max(i-3,0):i] for i in range(len(a), 0, -3)][::-1]
Run Code Online (Sandbox Code Playgroud)

另一个,它可以在不反转列表的情况下工作,但稍微有些丑陋:

[a[max(0,i):i+3] for i in range((len(a)-1)%3-2, len(a), 3)]
Run Code Online (Sandbox Code Playgroud)