如何创建函数将三个列表(姓名、国籍、年龄)合并为单个列表
问题与解决方案
问题描述
继之前的问题之后,需要创建一个函数,将三个不同列表的输出合并为一个列表的元素,具体要求:
- 函数接收3个输入参数,对应已有的
name、nationality、age三个列表 - 函数返回合并后的
results列表 - 这三个列表来自已实现的
read_information函数:
def read_information(file_name): name = [] nationality = [] age = [] with open(file_name) as file: for line in file: if not line.strip(): # 跳过空行 continue value = line.split(":")[1].strip() if line.startswith("Name"): name.append(value) if line.startswith("Nationality"): nationality.append(value) if line.startswith("Age"): age.append(value) return name, nationality, age
示例输入文本
Name : Anthony Hopkins Nationality: English Age : 23 Name : Ezequiel Ruiz Nationality: Spanish Age : 39
期望输出
["English Anthony Hopkins 23", "Spanish Ezequiel Ruiz 39"]
错误尝试代码
def order_information(nationality, name, age): name = [] nationality = [] age = [] results= [] with open("information.txt") as file: for line in file: if not line.strip(): # skips empty line continue value = line.split(":")[1].strip() if line.startswith("Name"): name.append(value) if line.startswith("Nationality"): nationality.append(value) if line.startswith("Age"): age.append(value) for name, nationality, age in results: results = nationality + name + age return results
解决方案
你的代码存在几个关键问题:
- 函数参数是传入的三个列表,但你在函数内部重新定义了空列表,直接覆盖了传入的参数
- 无需在这个合并函数中再次读取文件,因为输入已经是
read_information返回的处理好的列表 - 合并逻辑错误,没有正确遍历三个列表的对应元素进行拼接
正确的合并函数写法如下:
def order_information(nationality, name, age): results = [] # 使用zip同时遍历三个列表的对应位置元素 for ntl, nm, ag in zip(nationality, name, age): # 按要求格式拼接字符串并添加到结果列表 results.append(f"{ntl} {nm} {ag}") return results
使用示例
# 先调用读取函数获取三个列表 names, nationalities, ages = read_information("information.txt") # 调用合并函数得到最终结果 final_results = order_information(nationalities, names, ages) print(final_results) # 输出结果:['English Anthony Hopkins 23', 'Spanish Ezequiel Ruiz 39']
内容的提问来源于stack exchange,提问作者Learning one step at a time
相关产品推荐
相关产品推荐

