簡體   English   中英

如何在Python中將字符串列表評估為元組列表?

[英]How can I evaluate a list of strings as a list of tuples in Python?

我有一個包含如下表單的數千個元素的列表:

pixels = ['(112, 37, 137, 255)', '(129, 39, 145, 255)', '(125, 036, 138, 255)' ...]

我正在嘗試使用ast.literal_eval將這些字符串元素轉換為元組,但是在遇到像前導零(例如在顯示的第三個元組字符串中)之類的內容時會出現錯誤,其中包含錯誤SyntaxError: invalid token

pixels = [ast.literal_eval(pixel) for pixel in pixels]

什么是處理這樣的事情的好方法,並將這個字符串列表評估為元組列表?

使用re模塊。

>>> import re
>>> import ast
>>> pixels = ['(112, 37, 137, 255)', '(129, 39, 145, 255)', '(125, 036, 138, 255)']
>>> [ast.literal_eval(re.sub(r'\b0+', '', pixel)) for pixel in pixels]
[(112, 37, 137, 255), (129, 39, 145, 255), (125, 36, 138, 255)]

re.sub(r'\\b0+', '', pixel)有助於刪除前導零。 \\b匹配單詞字符和非單詞字符,反之亦然,所以這里必須有一個單詞邊界存在於零之前和空格之后或(符號。

更新:

>>> pixels = ['(0, 0, 0, 255)', '(129, 39, 145, 255)', '(125, 036, 138, 255)']
>>> [ast.literal_eval(re.sub(r'\b0+\B', '', pixel)) for pixel in pixels]
[(0, 0, 0, 255), (129, 39, 145, 255), (125, 36, 138, 255)]

無需使用ast.literal_evalre 只需剝離括號並強制轉換為整數:

def tupleize(s):
    s = s.strip('()').split(',')
    return tuple(int(entry) for entry in s)

pixels = [tupleize(pixel) for pixel in pixels]

暫無
暫無

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

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