Python 右键将字符串拆分为3组
什么是最有利于右分为三组的方法?我已经看到了这个答案,但我需要它正确对齐。最好是一个简单有效的无进口单班轮Python 右键将字符串拆分为3组,python,python-3.x,Python,Python 3.x,什么是最有利于右分为三组的方法?我已经看到了这个答案,但我需要它正确对齐。最好是一个简单有效的无进口单班轮 '123456789'=['123'、'456'、'789'] '12345678'=['12'、'345'、'678'] '1234567'=['1'、'234'、'567'] 简单(从链接中的答案重复): [int(a[:-1][i:i+3][::-1]),用于范围(0,len(a),3)][:-1] 说明:a[:-1]是a 我们将用切片组成反转 第一步:颠倒清单 第二步:把三个的部
- '123456789'=['123'、'456'、'789']
- '12345678'=['12'、'345'、'678']
- '1234567'=['1'、'234'、'567']
- 简单(从链接中的答案重复):
[int(a[:-1][i:i+3][::-1]),用于范围(0,len(a),3)][:-1]
说明:a[:-1]
是a
我们将用切片组成反转
第一步:颠倒清单
第二步:把三个的部分切成薄片
第三步:再次颠倒列表,以递增顺序显示数字
最后一步:颠倒整个列表
奖励:功能性合成糖
如果有函数的专有名称,则调试更容易
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)]
最短的并不总是最有活力的
def by3(s):
out = []
while len(s):
out.insert(0, s[-3:])
s = s[:-3]
return out
四轮班轮:
splitted_number = []
while number:
number, r = number[:-3], number[-3:]
splitted_number.insert(0, r)
另一种方法,不确定效率(如果它们已经是数字而不是字符串会更好),但在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']
如果有人觉得这个有用,我的建议是:
textwrap
是做这件事的内置模块
from textwrap import wrap
a = '123456789'
b = wrap(a, 3)
>>> b ['123', '456', '789']
扩展@Manu-answer
from textwrap import wrap
a = '123456789'
b = wrap(a, 3)
print(b)
newlist = []
for i in b:
newlist.append(int(i))
print(newlist)
或
不起作用。我得到
ValueError:int()的文本无效,以10为基数:'
表示a='123456789'
。是吗?我看不出“三组”位是从哪里来的。@user1461607不确定您的意思,但是格式化(num),,'
将字符串格式化为常规的,
分隔的3块,这样在,
上拆分就可以得到所需的结果。@user1461607这是格式化数字的一个有用功能(因为它非常常见)... 所以你可以把它一行写成格式(int('1234567'),',')。拆分(',')
如果你想…聪明的解决方案:-)我想知道它和我的性能相比如何wise@FabianHenze问题是,格式/拆分方法正在利用底层实现来完成“脏活”—因此会更快。。。瓶颈在于首先将字符串转换为整数,以便格式化工作。。。
>>> by3(a)
['12', '345', '678']
splitted_number = []
while number:
number, r = number[:-3], number[-3:]
splitted_number.insert(0, r)
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']
from textwrap import wrap
a = '123456789'
b = wrap(a, 3)
>>> b ['123', '456', '789']
from textwrap import wrap
a = '123456789'
b = wrap(a, 3)
print(b)
newlist = []
for i in b:
newlist.append(int(i))
print(newlist)
['123', '456', '789']
[123, 456, 789]
[Program finished]
n = 1234567890
v = []
while n > 0:
n, r = divmod(n, 1000)
v.insert(0, r)
print(v)
[1, 234, 567, 890]
[Program finished]