[英]Converting a string of tuples to a list of tuples in Python
如何將"[(5, 2), (1,3), (4,5)]"
轉換為元組列表[(5, 2), (1,3), (4,5)]
5,2 [(5, 2), (1,3), (4,5)]
我正在使用不支持"import ast"
planetlab
shell。 所以我無法使用它。
如果ast.literal_eval
不可用,則可以使用(unsafe!) eval
:
>>> s = "[(5, 2), (1,3), (4,5)]"
>>> eval(s)
[(5, 2), (1, 3), (4, 5)]
但是,您應該真正考慮一下序列化格式。 如果要在Python應用程序之間傳輸數據,並且需要元組和列表之間的區別,請使用pickle 。 否則,請使用JSON 。
如果您對字符串源的信任度不足以使用eval
,請使用re
。
import re
tuple_rx = re.compile("\((\d+),\s*(\d+)\)")
result = []
for match in tuple_rx.finditer("[(5, 2), (1,3), (4,5)]"):
result.append((int(match.group(1)), int(match.group(2))))
上面的代碼非常簡單,僅適用於2元組的整數。 如果要解析更復雜的結構,最好使用適當的解析器。
'join'替換后面的字符'()[]',並創建由逗號分隔的數字字符串
5,2,1,3,4,5
'split'將字符串拆分為','並創建列表字符串
['5','2','1','3','4','5']
'iter'創建迭代器,該迭代器將遍歷元素列表
最后一行使用列表推導,使用“ zip”將兩個數字組合在一起
it = iter("".join(c for c in data if c not in "()[] ").split(","))
result = [(int(x), int(y)) for x, y in zip(it, it)]
>>> [(5, 2), (1, 3), (4, 5)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.