END_NUMS_RE = re.compile(r'^(\D+)(\d+)$')
dict(END_NUMS_RE.match(x.strip()).groups() for x in data.split(','))
测试代码:
^{pr2}$
结果:
^{3}$
但是!正则表达式:
因此,对于那些关心使用正则表达式的人:
让我们将regex答案与第二投票率答案进行比较:
import re
END_NUMS_RE = re.compile(r'^(\D+)(\d+)$')
data = "electron1, gamma5, proton43, boson98"
def method1():
return dict(END_NUMS_RE.match(x.strip()).groups()
for x in data.split(','))
def method2():
l = data.split(',')
return {
''.join(
[x for x in item if not x.isdigit()]):
int(''.join([x for x in item if x.isdigit()])) for item in l
}
from timeit import timeit
print(timeit(method1, number=10000))
print(timeit(method2, number=10000))
def d(original_string):
data_dict = {}
for item in original_string.split(', '):
for t in enumerate(item):
if t[1].isdigit():
split_pos = t[0]
break
data_dict[item[:split_pos]] = int(item[split_pos:])
return data_dict
data = "electron1, gamma5, proton43, boson98"
print(d(data))
Data = "electron1, gamma5, proton43, boson98"
l=Data.split(',')
d={''.join([x for x in item if not x.isdigit()]):int(''.join([x for x in item if x.isdigit()])) for item in l}
print(d)
您可以使用正则表达式和generator expression来完成此操作:
代码:
测试代码:
^{pr2}$结果:
^{3}$但是!正则表达式:
因此,对于那些关心使用正则表达式的人:
让我们将regex答案与第二投票率答案进行比较:
计时结果:
regex的回答速度是原来的两倍。在
有几种不同的方法可以做到这一点。如果您知道您的列表中都有以某些数字结尾的字符串形式的条目,并且您希望以
<non_numerical_string>: <integer>
的形式将这些条目拆分为键和值,那么以下是一种不使用正则表达式的方法:在原始示例中,
n = int(input())
接受用户输入并尝试将其全部转换为整数。稍后,当您在字符串上使用.split()
时,会用空格将其分开,但这意味着逗号是新列表中单个字符串的一部分。因此,传入“(", ")
”可以得到所需的拆分(尽管这意味着原始字符串的所有内容都必须用逗号和空格隔开!)。在enumerate(item)
部分接受一个类似boson98
的字符串,并返回一个可以像列表[(0, 'b'), (1, 'o'), (2, 's'), (3, 'o'), (4, 'n'), (5, '3'), (6, '8')]
处理的对象。虽然我个人更喜欢regexp的简单性。在一种没有re的方法
输出
^{pr2}$相关问题 更多 >
编程相关推荐