如何将嵌套元组列表中的元组首元素从字符串转为整数?
问题解决:元组不可变导致的TypeError
你的代码报错是因为元组是不可变对象,一旦创建就无法修改它的元素值,所以number[0] = int(number[0])这种赋值操作不被允许。
正确的实现思路是:在生成元组之前,先把开头的数字字符串转为整数,再将整数和句子组合成元组。推荐使用split('\t', 1)来拆分,这样即使句子里包含制表符,也只会拆分一次,保证句子的完整性。
修正后的代码
newbfile = r'train_orig.txt' def getlines(filename): with open(filename, encoding='utf8') as fn: fn_list = [line.rstrip() for line in fn] return fn_list def makeSentences(lines): processed_sentences = [] for line in lines: # 只按制表符拆分一次,避免句子内的制表符破坏结构 num_str, sentence = line.split('\t', 1) # 将数字字符串转为整数,再组合成元组加入列表 processed_sentences.append( (int(num_str), sentence) ) return processed_sentences
更简洁的列表推导式写法
如果喜欢紧凑的代码,也可以用列表推导式实现:
def makeSentences(lines): return [ (int(num_str), sentence) for line in lines for num_str, sentence in [line.split('\t', 1)] ]
额外提示
如果你的输入文件里存在格式不规范的行(比如没有制表符),可以加个判断避免报错:
def makeSentences(lines): processed_sentences = [] for line in lines: parts = line.split('\t', 1) if len(parts) == 2: num_str, sentence = parts processed_sentences.append( (int(num_str), sentence) ) else: # 处理格式错误的行,比如跳过或记录日志 print(f"格式错误的行:{line}") return processed_sentences
内容的提问来源于stack exchange,提问作者pbear520
相关产品推荐
相关产品推荐

