簡體   English   中英

字符串數組坐標轉換為 python 中的整數數組

[英]Array of strings coordinates into array of integers in python

我有一個字符串坐標數組:

A = [ '(0.0),(3,3),(5,8)', '(1,2),(5,8),(8,9),(20,6)' , '(45,6),(91,5),(86,4)' , '(100,2),(105,8),(53,6)']

我需要將這些轉換為整數,到目前為止,我已經嘗試使用int(A ) 或float(A)進行轉換。

通過使用int()我得到這個錯誤:

"ValueError: invalid literal for int() with base 10: '(0, 0),(3, 0),(6, 0),(6, 5),(13, 0),(25, 5),(27, 5),(29, 5),(30, 0),(35, 5),(37, 5),(38, 5),(45, 0),(52, 0),(53, 5),(56, 0),(58, 0),(60, 0),(60, 5),(61, 5),(66, 0),(66, 5),(73, 0),(74, 0),(75, 5),(76"

(假設 0.0 是一個錯字)

正如 S3DEV 所建議的那樣,一種快速的方法是使用某種類型的eval() ,但不建議這樣做。

[list(eval(i)) for i in A]
[[(0, 0), (3, 3), (5, 8)],
 [(1, 2), (5, 8), (8, 9), (20, 6)],
 [(45, 6), (91, 5), (86, 4)],
 [(100, 2), (105, 8), (53, 6)]]

evalliteral_eval的比較

  1. eval:這是非常強大的,但如果您接受來自不受信任輸入的字符串來評估,這也是非常危險的。 想象一下在rm -rf /上使用 eval !!

  2. ast.literal_eval:僅對有限的一組 python 文字結構進行操作。 這使得 if 更安全。

在您的情況下,由於您的輸入是坐標字符串(確保這一點。)那么這兩種方法對您來說同樣安全/不安全。

正如我在對該問題的評論中提到的,一種方法是使用安全的eval方法,例如ast.literal_eval將字符串解析為元組。

假設(0.0)應該是(0,0)

import ast

[ast.literal_eval(i) for i in A]

Output:

[((0, 0), (3, 3), (5, 8)),
 ((1, 2), (5, 8), (8, 9), (20, 6)),
 ((45, 6), (91, 5), (86, 4)),
 ((100, 2), (105, 8), (53, 6))]

正則表達式解決方案怎么樣? 恕我直言,有點干凈,不需要使用eval

import re

A = ['(0,0),(3,3),(5,8)', '(1,2),(5,8),(8,9),(20,6)', '(45,6),(91,5),(86,4)', '(100,2),(105,8),(53,6)']
pattern = re.compile(r'\((\d+), *(\d+)\)')
[[(int(x), int(y)) for x, y in position] for position in [re.findall(pattern, group) for group in A]]

>> [[(0, 0), (3, 3), (5, 8)],
    [(1, 2), (5, 8), (8, 9), (20, 6)],
    [(45, 6), (91, 5), (86, 4)],
    [(100, 2), (105, 8), (53, 6)]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM