python - 如何将字符串列表评估为 Python 中的元组列表?

标签 python string tuples abstract-syntax-tree literals

我有一个表单的数千个元素的列表,如下所示:

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

我正在尝试使用 ast.literal_eval 将这些字符串元素转换为元组,但在遇到诸如前导零之类的事情时(例如,在显示的第三个元组字符串中)出现错误 语法错误: 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)]

关于python - 如何将字符串列表评估为 Python 中的元组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31009918/

相关文章:

python - 按A列过滤DataFrame的最佳方法,B列条件并给出C列的最小值

python - 在 Pandas 时间序列中每天查询相同的时间值

java - 我需要将一个对象转换为字符串,然后通过将其转换回我的对象​​来检索它

java - 用于在字符串中搜索子字符串的快速算法

c# - 为什么我们不能给元组中的属性命名?

C++14 auto lambda 可以接受 Obj<std::tuple<void>>——但模板函数不能?

python - 在 viewsets.ModelViewSet 上获取参数验证

python - 做字谜组的更好方法

python - 忽略python元组的一部分

javascript - 使用 Flowplayer 自动重复或如何在 javascript 中将回调作为字符串传递