Python同时遍历多个列表一一对应

Python在编程时常常需要的for循环遍历list,最常用的是单个list遍历,但是,有时遍历一个list并不能满足我们的需求,在一些特殊的场合,我们可能会需要遍历两个甚至多个列表;例如,有两个列表,第一个列表存放的是人物的姓名,第二个列表存放的是人物的年纪,他们之间的关系是对应的,怎么同时遍历他们的对应关系呢,这时常使用zip函数。

name_list = ['name1', 'name2', 'name3']
age_list = [54, 18, 34]
for name, age in zip(name_list, age_list):
    print(name, ':', age)

运行结果:

name1 : 54
name2 : 18
name3 : 34

除此之外,zip函数还有其他各种用法
(1)直接输出zip(list1, list2),返回的是一个zip对象。
(2) 在zip前面加上*, 它输出了三个元组, 正是两个列表中的三个数据一一对应的结果。
(3)还可以将此对象直接转化成列表,甚至字典!
实验如下所示:

name_list = ['name1', 'name2', 'name3']
age_list = [54, 18, 34]

print(zip(name_list, age_list))
print(type(zip(name_list, age_list)))
print(*zip(name_list, age_list))
print(list(zip(name_list, age_list)))
print(dict(zip(name_list, age_list)))
<zip object at 0x00000173AF8CDE48>
<class 'zip'>
('name1', 54) ('name2', 18) ('name3', 34)
[('name1', 54), ('name2', 18), ('name3', 34)]
{'name1': 54, 'name2': 18, 'name3': 34}

同样,还可以使用zip()来遍历三个及以上的列表。

除了以上方法外,还可以使用第2个列表的下标取元素。

list1 = [1, 2, 3, 4, 5]
list2 = ['a', 'b', 'c', 'd', 'f']
 
n = 0
for each in list1:
    print(each, list2[n])
    n += 1
1 a
2 b
3 c
4 d
5 f
### 如何在Python中对分组进行遍历 为了实现数据系列按照特定长度分组并对其进行遍历,在Python中有多种方法可以达成这一目标。一种常见的做法是利用`zip()`函数配合迭代器来创建固定大小的数据块。 当使用`zip(*[iter(s)]*n, strict=True)`这种模式时,可以通过重复相同的迭代器多次使得每次输出的元组都包含了对该迭代器调用的结果,从而达到将输入分割成指定长度(即n)的片段的效果[^1]。下面是一个具体的例子展示如何通过这种方式来进行分组: ```python from itertools import zip_longest def group_iterable(iterable, n): iters = [iter(iterable)] * n return list(zip(*iters)) data_series = ['a', 'b', 'c', 'd', 'e', 'f'] groups_of_two = group_iterable(data_series, 2) for group in groups_of_two: print(group) ``` 上述代码定义了一个名为`group_iterable`的功能函数,它接受一个可迭代对象以及想要划分出来的每组元素数量作为参数,并返回由这些子序列组成的列表。这里需要注意的是如果原始序列无法被整除,则最后可能会丢失一些剩余项;为了避免这种情况发生,也可以考虑使用`itertools.zip_longest()`替代标准库中的`zip()`以填充缺失值。 对于更简单的场景下,比如只需要两个列表之间的一一对应关系而不需要严格控制其长度相等情况下的组合操作,可以直接应用内置的`zip()`函数。这会持续迭代直到其中任何一个参与运算的对象耗尽为止[^2]。例如: ```python l1 = [1, 2, 3, 4] l2 = ['a', 'b', 'c'] paired_items = zip(l1, l2) for item in paired_items: print(item) ``` 这段程序将会把两个不同类型的集合配对起来形成一个新的聚合体供后续处理使用。 另外还有一种情况就是基于条件判断或是数值范围内的循环结构,如`while`和`for`语句能够帮助完成更加复杂的逻辑流程设计[^3]。然而针对本问题而言,前面提到的技术已经足够解决问题了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值