如何从字符串中提取多个值
我有一个很长的Python列表,像这样:
['A p=45 n=200 SNR=12', 'B p=2232 n=22 SNR=2']
我想从这个列表中提取出一个包含
p
、n
和SNR
值的元组列表。所以:
funz(['A p=45 n=200 SNR=12', 'B p=2232 n=22 SNR=2'])
会返回:
[(45,200,12), (2232,22,2)]
这个列表中的字符串都有相同的结构。
3 个回答
0
你可以使用 re.findall
这个功能,还有一个叫 列表推导式 的东西:
>>> from re import findall
>>> lst = ['A p=45 n=200 SNR=12', 'B p=2232 n=22 SNR=2']
>>> def funz(lst):
... return [tuple(map(int, findall("\d+", i))) for i in lst]
...
>>> funz(['A p=45 n=200 SNR=12', 'B p=2232 n=22 SNR=2'])
[(45, 200, 12), (2232, 22, 2)]
>>>
这里的正则表达式模式 \d+
是用来匹配一个或多个数字的。
1
另一个选择是这个:
def funz(l):
return [tuple(int(i.split('=')[1]) for i in item.split(' ')[1:]) for item in l]
根据 @bvukelic 的评论进行了编辑。
1
import re
data = ['A p=45 n=200 SNR=12', 'B p=2232 n=22 SNR=2']
result = []
for x in data:
result.append( map( int, re.search('p=(\d+).*n=(\d+).*SNR=(\d+)', x).groups()) )
print result
[[45, 200, 12], [2232, 22, 2]]
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。