Python如何按位置对应打印两个等长列表的元素内容
问题说明
需要实现两个等长列表同位置元素配对逐行打印的功能,现有测试列表如下:
name = ['Tyler', 'Daniel', 'Connor', 'Jeff'] number = ['64', '34', '76', '24']
预期输出为同索引位置的姓名、数字逐行对应,格式如下:
Tyler 64 Daniel 34 Connor 76 Jeff 24
之前尝试编写的代码存在语法和逻辑问题,无法得到预期结果:
print(name[i]+" "+number[j] for i in name and for j in number)
可行实现方案
方案1:使用zip()函数(推荐)
Python内置的zip()函数会将多个可迭代对象同位置的元素打包为元组,完全适配等长列表配对的场景,代码最简洁:
name = ['Tyler', 'Daniel', 'Connor', 'Jeff'] number = ['64', '34', '76', '24'] for item_name, item_num in zip(name, number): print(item_name, item_num)
运行后直接输出符合要求的结果,print()传入多个参数时默认以空格分隔,不需要手动做字符串拼接。
方案2:索引遍历
如果需要通过下标匹配元素,可以通过range()生成列表长度范围的索引,依次取两个列表同位置的元素打印:
name = ['Tyler', 'Daniel', 'Connor', 'Jeff'] number = ['64', '34', '76', '24'] for i in range(len(name)): print(name[i], number[i])
提示:该方案要求两个列表长度完全一致,否则会触发索引越界错误;
zip()在列表长度不一致时会以较短的列表长度为准截断配对,不会抛出异常。
原代码问题说明
之前写的代码存在两个核心问题:
- 语法错误:推导式/生成器表达式中多循环的写法不需要加
and关键字,且嵌套for循环会生成两个列表元素的所有两两组合(笛卡尔积),完全不符合同位置配对的需求 - 逻辑错误:直接将生成器对象传入
print(),只会打印生成器的对象内存地址,不会迭代输出内部的内容
内容的提问来源于stack exchange,提问作者Eliahs Johansson
相关产品推荐
相关产品推荐

