我有一个很长的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)]
列表中的字符串具有完全相同的结构。
答案 0 :(得分:2)
另一种选择是:
def funz(l):
return [tuple(int(i.split('=')[1]) for i in item.split(' ')[1:]) for item in l]
编辑了@ bvukelic的评论。
答案 1 :(得分:0)
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]]
答案 2 :(得分:0)
您可以使用re.findall
和list comprehension:
>>> 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+
匹配一个或多个数字。