提问者:小点点

右键将字符串分成3组


什么是最具蟒蛇式的方法来右转分成三人一组?我看到了这个答案https://stackoverflow.com/a/2801117/1461607但我需要它正确对齐。最好是一个简单有效的无进口单班轮。

  • “123456789”=['123'、'456'、'789']

共3个答案

匿名用户

另一种方法,不确定效率(如果它们已经是数字而不是字符串会更好),但在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']

匿名用户

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

[int(a[:-1][i:i3][:-1]),用于范围(0,len(a),3)][:-1]

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

 a           =   a[::-1]
'123456789' - > '987654321'
 a[i]           =   a[i:i+3]
 '987654321'    ->  '987','654','321'
 a[i]           =  int(a[i][::-1])
 '987','654','321' -> 789, 654, 123
 a           =   a[::-1]
 789, 456, 123 -> 123, 456, 789

当您为函数指定正确的名称时,调试会更容易

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]

匿名用户

这是我想到的最好的:

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

还有一个,它不反转列表,但有点难看:

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