将包含字符和整数的字符串转换为 Python 中的列表
Convert a string that includes both characters and integers to a list in Python
我知道如何转换例如:
'1-2=3^4/5' -> [1, '-', 2, '=', 3, '^', 4, '/', 5]
但如果我想转换:
'12-34=56^78/90' -> [12, '-', 34, '=', 56, '^', 78, '/', 90]
那我有问题了。
我尝试了几种方法,但从未完美运行 - 它要么遇到无法运行的边缘情况,要么出现问题。例如,我遇到的问题之一是 int 的第一个数字之后的数字被重复为新元素。
如果有人能抽出时间来帮助我,我将不胜感激。
提前致谢!
编辑:感谢大家的快速解答!但是,我对编程有点陌生,因此不熟悉所使用的模块或方法。
是否可以仅使用内置函数来实现?
使用itertools.groupby
按连续数字分组(使用str.isdigit)
from itertools import groupby
s = '12-34=56^78/90'
res = ["".join(group) for k, group in groupby(s, key=str.isdigit)]
print(res)
输出
['12', '-', '34', '=', '56', '^', '78', '/', '90']
一个简单的模式,select 一些数字或非数字都可以
pat = re.compile(r"\d+|\D")
parts = pat.findall("1-2=3^4/5")
print(parts) # ['1', '-', '2', '=', '3', '^', '4', '/', '5']
parts = pat.findall("12-34=56^78/90")
print(parts) # ['12', '-', '34', '=', '56', '^', '78', '/', '90']
其他两个答案要好得多。但是如果你觉得有必要在没有任何进口的情况下这样做,这里有一个解决方案。
s = '12-34=56^78/90'
output = []
section = []
for e in s:
try:
e = int(e)
section.append(e)
except ValueError:
output.append(''.join(map(str,section)))
output.append(e)
section = []
output.append(''.join(map(str,section)))
我知道如何转换例如:
'1-2=3^4/5' -> [1, '-', 2, '=', 3, '^', 4, '/', 5]
但如果我想转换:
'12-34=56^78/90' -> [12, '-', 34, '=', 56, '^', 78, '/', 90]
那我有问题了。
我尝试了几种方法,但从未完美运行 - 它要么遇到无法运行的边缘情况,要么出现问题。例如,我遇到的问题之一是 int 的第一个数字之后的数字被重复为新元素。
如果有人能抽出时间来帮助我,我将不胜感激。
提前致谢!
编辑:感谢大家的快速解答!但是,我对编程有点陌生,因此不熟悉所使用的模块或方法。 是否可以仅使用内置函数来实现?
使用itertools.groupby
按连续数字分组(使用str.isdigit)
from itertools import groupby
s = '12-34=56^78/90'
res = ["".join(group) for k, group in groupby(s, key=str.isdigit)]
print(res)
输出
['12', '-', '34', '=', '56', '^', '78', '/', '90']
一个简单的模式,select 一些数字或非数字都可以
pat = re.compile(r"\d+|\D")
parts = pat.findall("1-2=3^4/5")
print(parts) # ['1', '-', '2', '=', '3', '^', '4', '/', '5']
parts = pat.findall("12-34=56^78/90")
print(parts) # ['12', '-', '34', '=', '56', '^', '78', '/', '90']
其他两个答案要好得多。但是如果你觉得有必要在没有任何进口的情况下这样做,这里有一个解决方案。
s = '12-34=56^78/90'
output = []
section = []
for e in s:
try:
e = int(e)
section.append(e)
except ValueError:
output.append(''.join(map(str,section)))
output.append(e)
section = []
output.append(''.join(map(str,section)))