如何从字符串中提取多个值

0 投票
3 回答
3138 浏览
提问于 2025-04-18 12:34

我有一个很长的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]]

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答