如何解决如何将字符串分成多段?
这是我以此形式提出的第一个问题。
例如:
我有这个字符串=== 294216673539910447
并有此数字列表=== [3,2,3,3]
我需要输出=== [294,21,667,353,99,10,447]
我在表格中找到的所有内容都被x分割,但关于多x却一无所获
解决方法
尝试一下:
def split(s,len_arr):
res = []
start = 0
for part_len in len_arr:
res.append(s[start:start+part_len])
start += part_len
return res
> split("294216673539910447",[3,2,3,3])
> ['294','21','667','353','99','10','447']
,
Python中没有多重分割,所以这是一个自己实现的好机会。
我知道如何使用numpy
的功能方式,我将尝试完全使用Python重复相同的步骤:
from itertools import accumulate
s = '294216673539910447'
numbers = [3,3]
idx = list(accumulate(numbers,initial=0))
print([s[i:j] for i,j in zip(idx[:-1],idx[1:])])
这说明了一种应用累计和的漂亮方法。 accumulate
计算索引位置,它们是[0,5,8,11,13,15,18]
。因此,您需要适当地排列它们以获取切片0:3
,3:5
,...,15:18
。
['294','447']
,
使用迭代器,然后使用"".join()
进行连接,例如:
def split(s,arr):
iterator = iter(s)
return ["".join(next(iterator) for _ in range(length)) for length in arr]
print(split('294216673539910447',3]))
结果:
['294','447']
,
另一种方法是-转换为字符串并按索引分割。
在Python中,可以通过以下方式完成
:number = str(294216673539910447)
split = [3,3]
count = 0
result = []
for s in split:
result.append(int(number[count:s+count]))
count += s
print(result)
给出输出:
[294,21,667,353,99,10,447]
,
我编写了一个函数,可以灵活地使用不同类型的输入来执行此操作
import itertools
def splits(sequence,indexes,relative=False):
"""
Split sequence at each index in "indexes".
If "relative" is True,each index is taken as relative to the previous one.
>>> list(splits('hello world',6]))
['hel','lo ','world']
>>> list(splits('hello world',3],relative=True))
['hel','world']
"""
if relative:
indexes = itertools.accumulate(indexes)
start = None
for stop in itertools.chain(indexes,[None]):
yield sequence[start:stop]
start = stop # For next loop
实际上:
>>> list(splits('294216673539910447',2],True))
['294','447']
请注意,您不需要输入列表中的最后一个索引。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。