在字符串/列表中查找特定元素,然后按递增顺序移动它们

问题描述 投票:0回答:3

我尝试将SVG中的路径从cm更改为mm。路径由字符串“ d”定义,如下所示:

<path d="M317.3962167,-142.7 L317.3962167,-142.7 ...

我现在想将所有小数点都以i递增(从cm到mm-> i = 1)。结果应如下所示:

<path d="M3173.962167,-1427 L3173.962167,-1427

<path d="M3173.962167,-1427.0 L3173.962167,-1427.0

因此,如果移动了小数点并且以下列表条目为空,则应删除小数点,或者需要添加“ 0”。什么都容易。我认为最好先移动所有小数点,然后再擦除第二个循环中的空格,然后再删除这些点。

到目前为止我所拥有的:

def cm_to_mm(chars, char, increment):
# Convert character sequence to list type.
char_list = list(chars)
if "." in chars:
    # Get the current index of the target character.
    old_index = char_list.index(char)
    # Remove the target character from the character list.
    char = char_list.pop(old_index)
    # Insert target character at a new location.
    new_index = old_index + increment
    char_list.insert(new_index, char)
    # Convert character list back to str type and return.
return ''.join(char_list)

但是这只会移动“。”的第一次出现。

我已经检查了很多帖子,但是大多数都只是在谈论将角色的末尾添加“ append”,这对我来说没有帮助。感谢您的帮助,非常感谢!

python string character increment move
3个回答
0
投票

创建这样的列表不是更好的方法吗?

path_list = [ 317.3962167, -142.7]
new_path_list = []

for i in path_list:
    new_path_list.append(i*10)

现在您将获得一个列表,其中这些数字移至小数点后一位。然后,您可以像这样创建路径

path_string = "M" + str(new_path_list[0]) + ", " + str(new_path_list[1]) + ", L" + str(new_path_list[0]) + ", " + str(new_path_list[1])

这会给你一个字符串,就像你在追寻,不是吗?


0
投票

尝试一下,

import re

input = '<path d="M317.3962167,-142.7 L317.3962167,-142.7"></path>'

# extract all the values inside the tag
values = re.search('d="(.*)"', input)

parsed_values = []
for value in values.group(1).split(","):

    tmp = []
    for v in value.split():
        search_ = re.search("([\w|-])(\d+.\d+)", v)

        # 317.3962167 * 10 -> 3173.962167 
        prefix, num = search_.group(1), float(search_.group(2)) * 10
        tmp.append(prefix + str(num))

    parsed_values.append(" ".join(tmp))

print('<path d="%s"></path>' % ",".join(parsed_values))

输出

<path d="M3173.962167,-1427.0 L3173.962167,-1427.0"></path>

0
投票

您可以使用正则表达式。您可以保存以管理字符串位置。

import re

def rpl(mo): 
    v= float(mo[0])*10 
    return str(v) 

s= '<path d="M317.3962167,-142.7 L317.3962167,-142.7" >'

re.sub(r"[-]?\d+[\.]?\d*",rpl,s)  

'<path d="M3173.962167,-1427.0 L3173.962167,-1427.0" >'

在[sub.sub中,r"[-]?\d+[\.]?\d*"是浮点型,rpl是一个以匹配对象作为参数的常规,m[0]是第一个匹配,即浮点。

© www.soinside.com 2019 - 2024. All rights reserved.