【发布时间】:2017-05-22 09:48:33
【问题描述】:
我想将字符串中的数字提取到列表中,但也包括其他字母。
例如:
a='a815e8ef951'
应该导致输出:
['a',815,'e',8,'f',951]
谢谢!
【问题讨论】:
-
指数符号呢,比如
[1e8]? -
在此处发布之前,请在 Google 上搜索您的问题。
标签: python
我想将字符串中的数字提取到列表中,但也包括其他字母。
例如:
a='a815e8ef951'
应该导致输出:
['a',815,'e',8,'f',951]
谢谢!
【问题讨论】:
[1e8]?
标签: python
您可以为此使用正则表达式和re:
import re
matches = re.findall(r'(\d+|\D+)', 'a815e8ef951')
matches = [ int(x) if x.isdigit() else x for x in matches ]
# Output: ['a', 815, 'e', 8, 'ef', 951]
【讨论】:
isdigit。
您主要使用 itertools.groupby 和 list comprehension 表达式为:
>>> from itertools import groupby, chain
>>> a='a815e8ef951'
>>> [''.join(s) for _, s in groupby(a, str.isalpha)]
['a', '815', 'e', '8', 'ef', '951']
如果还想将整型字符串转换为int,则必须将表达式修改为:
>>> [''.join(s) if i else int(''.join(s)) for i, s in groupby(a, str.isalpha)]
['a', 815, 'e', 8, 'ef', 951]
为了使最后一个表达式更简洁,您将if 部分移动到某个函数:
def tranform_string(to_int, my_list):
my_string = ''.join(my_list)
return int(my_string) if to_int else my_string
new_list = [tranform_string(i, s) for i, s in groupby(a, str.isdigit)]
# using `isdigit()` here ^
new_list 将保存所需内容的位置。
【讨论】:
groupby(a, lambda x: x.isalpha()) 与groupby(a, str.isalpha) 相同
chain吗?这里没有效果。