[英]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_eval
或re
。 只需剝離括號並強制轉換為整數:
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.