将列表元素拆分为数组

2024-05-20 13:37:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串数据集,需要将字符串的关键部分过滤到一个数组中。你知道吗

data[0] 提供输出:

['<ellipse cx="32.0" cy="8.0" fill="silver" rx="16.0" ry="16.0" /',
 '<ellipse cx="32.0" cy="56.0" fill="green" rx="32.0" ry="16.0" /',
 '<ellipse cx="8.0" cy="8.0" fill="green" rx="16.0" ry="32.0" /']

我需要创建以下数组:

key_data[0] -> [['ellipse' , 32.0, 8.0, 'silver', 16.0, 16.0], [ 'ellipse', 32.0, 56.0, 'green', 32.0, 16.0], ['ellipse', 8.0, 8.0, 'green', 16.0, 32.0]]

如有任何建议,将不胜感激


Tags: 数据key字符串datasilvergreen数组rx
3条回答

这是一种使用regex的方法。re.match。你知道吗

例如:

import re

data = ['<ellipse cx="32.0" cy="8.0" fill="silver" rx="16.0" ry="16.0" /', '<ellipse cx="32.0" cy="56.0" fill="green" rx="32.0" ry="16.0" /', '<ellipse cx="8.0" cy="8.0" fill="green" rx="16.0" ry="32.0" /']
result = []
for i in data:
    m = re.match(r"\<([a-z]+) \w+=(.*?)\s\w+=(.*?)\s\w+=(.*?)\s\w+=(.*?)\s\w+=(.*?)", i)
    result.append([j.strip('"') for j in m.groups() if j])
print(result)

输出:

[['ellipse', '32.0', '8.0', 'silver', '16.0'],
 ['ellipse', '32.0', '56.0', 'green', '32.0'],
 ['ellipse', '8.0', '8.0', 'green', '16.0']]

或者使用re.match&;re.findall

例如:

data = ['<ellipse cx="32.0" cy="8.0" fill="silver" rx="16.0" ry="16.0" /', '<ellipse cx="32.0" cy="56.0" fill="green" rx="32.0" ry="16.0" /', '<ellipse cx="8.0" cy="8.0" fill="green" rx="16.0" ry="32.0" /']
result = []
for i in data:
    m = re.match(r"\<([a-z]+)", i)
    attribs = re.findall(r'\w+="(.*?)"', i)
    result.append([m.group(1)] + attribs )

这里有一个不使用正则表达式的解决方案。你知道吗

a = ['<ellipse cx="32.0" cy="8.0" fill="silver" rx="16.0" ry="16.0" ',
 '<ellipse cx="32.0" cy="56.0" fill="green" rx="32.0" ry="16.0" ',
 '<ellipse cx="8.0" cy="8.0" fill="green" rx="16.0" ry="32.0" ']

d = [i.split() for i in a]
r = [[j.split('=')[-1] for j in i] for i in d]
s = [[i.strip('"').lstrip('<') for i in k] for k in r]

# convert to float where possible
for k in s:
    for i, j in enumerate(k):
        try:
            k[i] = float(j)
        except ValueError:
            pass

>>> print(s)
[['ellipse', 32.0, 8.0, 'silver', 16.0, 16.0],
['ellipse', 32.0, 56.0, 'green', 32.0, 16.0],
['ellipse', 8.0, 8.0, 'green', 16.0, 32.0]]
import re

data = ['<ellipse cx="32.0" cy="8.0" fill="silver" rx="16.0" ry="16.0" /',
        '<ellipse cx="32.0" cy="56.0" fill="green" rx="32.0" ry="16.0" /',
        '<ellipse cx="8.0" cy="8.0" fill="green" rx="16.0" ry="32.0" /']

re_compile = re.compile(r'<(.*?) cx="(.*?)" cy="(.*?)" fill="(.*?)" rx="(.*?)" ry="(.*?)" /')
result = list(map(lambda x: re_compile.search(x).groups(), data))
print(result)

相关问题 更多 >