[英]in python how do I convert a single digit number into a double digits string?
[英]How to join subsequent digits in a Python list into a double (or more) digit number
我有以下字符串:
string = 'TAA15=ATT'
我列出了一个清单:
string_list = list(string)
print(string_list)
结果是:
['T', 'A', 'A', '1', '5','=', 'A', 'T', 'T']
我需要检测后续数字并将它们连接成一个数字,如下所示:
['T', 'A', 'A', '15','=', 'A', 'T', 'T']
我也很关心表演。 这个字符串转换完成了一千次。
感谢您提供的任何提示。
这是一个非常简短的解决方案
import re
def digitsMerger(source):
return re.findall(r'\d+|.', source)
digitsMerger('TAA15=ATT')
['T', 'A', 'A', '15', '=', 'A', 'T', 'T']
使用itertools.groupby
例如:
from itertools import groupby
string = 'TAA15=ATT'
result = []
for k, v in groupby(string, str.isdigit):
if k:
result.append("".join(v))
else:
result.extend(v)
print(result)
输出:
['T', 'A', 'A', '15', '=', 'A', 'T', 'T']
另一个正则表达式:
import re
s = 'TAA15=ATT'
pattern = r'\d+|\D'
m = re.findall(pattern, s)
print(m)
你可以在Python中使用正则表达式re
:
import re
string = 'TAA15=ATT'
num = re.sub('[^0-9,]', "", string)
pos = string.find(num)
str2 = re.sub('\\d+',"", string)
str2 = re.sub('=',"", str2)
print(str2)
l = list()
for el in str2:
l.append(el)
l.insert(pos, num)
print(l)
基本上re.sub('[^0-9,]', "", string)
告诉:取字符串,匹配所有不是( ^
表示否定)数字( 0-9
)的字符并用它们替换它们第二个参数,即一个空字符串。 所以基本上剩下的只是你必须转换为整数的数字。
如果=
总是在数字之后而不是
str2 = re.sub('\\d+',"", string)
str2 = re.sub('=',"", str2)
你可以做
str2 = re.sub('\\d+=',"", string)
您可以创建一个比较上次看到的值和下一个值的函数,并使用functools.reduce
:
from functools import reduce
string_list = ['T', 'A', 'A', '1', '5', 'A', 'T', 'T']
def combine_nums(lst, nxt):
if lst and all(map(str.isdigit, (lst[-1], nxt))):
nxt = lst[-1] + nxt
return lst + [nxt]
print(reduce(combine_nums, string_list, [])
结果:
['T', 'A', 'A', '1', '15', 'A', 'T', 'T']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.