Python 3.5中如何将字符串转换为指定格式的元组对?
Python 3.5 字符串转指定元组格式的解决方案
一、实现单词配对元组列表格式
看你提供的代码和待处理文件,应该是想把文本里的连续单元两两配对成元组,再组成列表。先修正你代码里的问题,提供可行的实现:
import itertools # 读取文件并清理冗余格式 with open("data.txt", "r", encoding="utf-8") as f: # 去掉文件内容里的[]、引号,拆分出单个元素 raw_content = f.read().strip().strip("[]'").replace("'", "").split() # 两两配对成元组,若元素总数为奇数,zip会自动忽略最后一个单独元素 # 要是想保留最后一个元素并补None,就用itertools.zip_longest替换zip pair_tuple_list = list(zip(raw_content[::2], raw_content[1::2])) print(pair_tuple_list)
说明:
- 先处理文件内容里的冗余符号(比如外层的
[]和单引号),把内容拆分成独立的元素列表 - 通过切片分别取偶数位和奇数位元素,用
zip配对成元组,最终得到你需要的[('i', 'went'),('to', 'work'),...]格式
二、实现嵌套元组格式
针对你需要的((1231, 123), (2341, 1210), (342,12), (5462, 565))格式,分两种场景处理:
场景1:文件每行是一组数字对(比如每行内容为"1231 123")
with open("num_data.txt", "r") as f: # 读取每行,拆分数字并转成整数元组,最后嵌套成大元组 nested_num_tuple = tuple( tuple(map(int, line.strip().split())) for line in f if line.strip() # 跳过空行 ) print(nested_num_tuple)
场景2:从连续数字字符串列表中每两个一组
如果你的输入是一个数字字符串列表,直接分组转换:
num_str_list = ['1231','123','2341','1210','342','12','5462','565'] # 每两个元素为一组转成整数元组,再嵌套成大元组 nested_num_tuple = tuple( tuple(map(int, num_str_list[i:i+2])) for i in range(0, len(num_str_list), 2) ) print(nested_num_tuple) # 输出 ((1231, 123), (2341, 1210), (342, 12), (5462, 565))
针对你提供的特殊标注文本的嵌套元组转换
你的待处理文件里是带标注的文本单元(比如"啶た啶ㄠ啶曕啶�NNP"),如果要把每个单元拆分成「文本内容+标注标签」的嵌套元组,可以这样处理:
with open("data.txt", "r", encoding="utf-8") as f: raw_content = f.read().strip().strip("[]'").replace("'", "").split() # 拆分每个单元的文本和标签(假设标签是末尾的大写字母组合) def split_text_tag(item): # 找到第一个大写字母的位置,拆分文本与标签 tag_start_idx = next((i for i, c in enumerate(item) if c.isupper()), len(item)) return (item[:tag_start_idx], item[tag_start_idx:]) # 转成嵌套元组 result_nested_tuple = tuple(split_text_tag(item) for item in raw_content) print(result_nested_tuple)
这个代码会输出类似(('啶た啶ㄠ啶曕啶�', 'NNP'), ('啶∴', 'NNP'), ...)的嵌套元组,符合你的格式需求。
内容的提问来源于stack exchange,提问作者Asiis Pradhan
相关产品推荐
相关产品推荐

