Python循环选取列表元素求助:输出与预期不符
问题分析与解决方案
首先看你遇到的问题:原来的代码因为zip(list1, list2)的特性,只循环了3次(因为list2只有3个元素),每次打印list1中相邻的两个元素,所以只输出了前4个元素的相邻对。而你期望的是输出list1的全部6个元素,下面给你两种针对性的解决办法:
方案1:直接输出list1的所有元素(匹配你的期望输出)
如果你的目标是把list1的元素用空格连接成一行输出,最简单的方式是用字符串的join方法:
list1 = ['a1', 'a2', 'a3', 'a4', 'a5', 'a6'] print(' '.join(list1))
运行后会直接输出:
a1 a2 a3 a4 a5 a6
如果你想用循环的方式实现,也可以遍历list1的每个元素并打印(注意设置end=' '避免换行):
list1 = ['a1', 'a2', 'a3', 'a4', 'a5', 'a6'] for item in list1: print(item, end=' ') print() # 最后补一个换行符,让输出更规范
方案2:如果你的实际需求是遍历list1的所有相邻元素对
如果你其实是想打印list1中所有连续的相邻元素对(比如a1&a2、a2&a3…a5&a6),那原来的代码错误在于用了zip(list1, list2)限制了循环次数,正确的做法是基于list1的长度来循环:
list1 = ['a1', 'a2', 'a3', 'a4', 'a5', 'a6'] for i in range(len(list1) - 1): a = list1[i] b = list1[i + 1] print(a, b)
运行后会输出:
a1 a2 a2 a3 a3 a4 a4 a5 a5 a6
为什么原来的代码不对?
zip(list1, list2)会将两个列表中对应位置的元素配对,直到较短的列表耗尽。因为list2只有3个元素,所以zip只会生成3个元组:('a1',1)、('a2',2)、('a3',3),循环只执行3次,i分别取0、1、2,所以只能取到list1[0]&[1]、[1]&[2]、[2]&[3],也就是你看到的三行输出。
内容的提问来源于stack exchange,提问作者meteor23
相关产品推荐
相关产品推荐

