将存储在元组中的坐标字符串转换为列表
Transform string of coordinates stored in a tuple into list
我有一串坐标存储在元组序列中,例如'(522, 187) (522, 187) (522, 191) (523, 188) (522, 190)
(先存储在双端队列中,然后再转换为字符串)。
- 如何将此实体转换为 list/deque 元组?这样它看起来像
[(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)]
?
使用 split(',') 进行简单拆分是行不通的,因为它随后会由于元组内的“,”而分隔每个坐标。
- 有没有更方便的方法在 .csv 文件的 单个 单元格中存储 list/deque 元组?我需要将每次试验收到的所有坐标存储在一个单独的单元格中。使用 _x 和 _y 坐标制作两列有时会导致这些数组的长度不相等。
您可以使用 ) (
拆分字符串,然后对各个元组进行处理:
>>> [tuple(int(v) for v in a.strip("()").split(", ")) for a in s.split(') (')]
[(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)]
其次,方法很多。一种是将所有坐标存储为单个字符串,并隐含地知道它们是 X/Y 对:522,187,522,187,522,191,...
或者您可以直接存储 [(522, 187), (522, 187), (522, 191)]
并使用 ast.literal_eval()
将其再水化为元组列表。
或者,最理想的情况是,您可以使用不像 CSV 那样 字符串类型 的数据格式,例如 pickle 文件,如果您正在使用 Python一个人,JSON 如果你需要交流,...
这是答案,使用正则表达式。
res = [tuple(e.replace(" ", "").split(",")) for e in re.findall("[1-9]{3}, [1-9]{3}", string)]
这将是一个字符串元组列表。
将它们转换成整数
list(map(lambda x: (int(x[0]), int(x[1])), res))
尚未优化此代码。
你可以这样做:
from ast import literal_eval
tuples = '(522, 187) (522, 187) (522, 191) (523, 188) (522, 190)'
result = [literal_eval(f'({x})') for x in tuples.strip('()').split(') (')]
下次背tuples = str(result)
就可以了!您可以使用 result = literal_eval(tuples)
检索它
这对我有用:
a = '(522, 187) (522, 187) (522, 191) (523, 188) (522, 190)'
res = list(eval(a.replace(', ',',').replace(' ',',')))
输出:
[(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)]
我有一串坐标存储在元组序列中,例如'(522, 187) (522, 187) (522, 191) (523, 188) (522, 190)
(先存储在双端队列中,然后再转换为字符串)。
- 如何将此实体转换为 list/deque 元组?这样它看起来像
[(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)]
?
使用 split(',') 进行简单拆分是行不通的,因为它随后会由于元组内的“,”而分隔每个坐标。
- 有没有更方便的方法在 .csv 文件的 单个 单元格中存储 list/deque 元组?我需要将每次试验收到的所有坐标存储在一个单独的单元格中。使用 _x 和 _y 坐标制作两列有时会导致这些数组的长度不相等。
您可以使用 ) (
拆分字符串,然后对各个元组进行处理:
>>> [tuple(int(v) for v in a.strip("()").split(", ")) for a in s.split(') (')]
[(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)]
其次,方法很多。一种是将所有坐标存储为单个字符串,并隐含地知道它们是 X/Y 对:522,187,522,187,522,191,...
或者您可以直接存储 [(522, 187), (522, 187), (522, 191)]
并使用 ast.literal_eval()
将其再水化为元组列表。
或者,最理想的情况是,您可以使用不像 CSV 那样 字符串类型 的数据格式,例如 pickle 文件,如果您正在使用 Python一个人,JSON 如果你需要交流,...
这是答案,使用正则表达式。
res = [tuple(e.replace(" ", "").split(",")) for e in re.findall("[1-9]{3}, [1-9]{3}", string)]
这将是一个字符串元组列表。 将它们转换成整数
list(map(lambda x: (int(x[0]), int(x[1])), res))
尚未优化此代码。
你可以这样做:
from ast import literal_eval
tuples = '(522, 187) (522, 187) (522, 191) (523, 188) (522, 190)'
result = [literal_eval(f'({x})') for x in tuples.strip('()').split(') (')]
下次背tuples = str(result)
就可以了!您可以使用 result = literal_eval(tuples)
这对我有用:
a = '(522, 187) (522, 187) (522, 191) (523, 188) (522, 190)'
res = list(eval(a.replace(', ',',').replace(' ',',')))
输出:
[(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)]