大家好,给大家分享一下python zip函数用于for循环,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!
zip() 函数是 Python 内置函数之一,它可以将多个序列(列表、元组、字典、集合、字符串以及 range() 区间构成的列表)“压缩”成一个 zip 对象。所谓“压缩”,其实就是将这些序列中对应位置的元素重新组合,生成一个个新的元组Python祝生日快乐创意代码。
和 Python 3.x 版本不同,Python 2.x 版本中的 zip() 函数会直接返回列表,而不是返回 zip 对象。但是,返回的列表或者 zip 对象,其包含的元素(都是元组)是相同的。
zip() 函数的语法格式为:
zip(iterable, ...)
其中 iterable,... 表示多个列表、元组、字典、集合、字符串,甚至还可以为 range() 区间。
下面程序演示了 zip() 函数的基本用法:
my_list = [11, 12, 13]
my_tuple = (21, 22, 23)
print([x for x in zip(my_list, my_tuple)])
my_dic = {31: 2, 32: 4, 33: 5}
my_set = {41, 42, 43, 44}
print([x for x in zip(my_dic)])
my_pychar = "python"
my_shechar = "shell"
print([x for x in zip(my_pychar, my_shechar)])
程序执行结果为:
分析以上的程序和相应的输出结果不难发现,在使用 zip() 函数“压缩”多个序列时,它会分别取各序列中第 1 个元素、第 2 个元素、... 第 n 个元素,各自组成新的元组。需要注意的是,当多个序列中元素个数不一致时,会以最短的序列为准进行压缩。
另外,对于 zip() 函数返回的 zip 对象,既可以像上面程序那样,通过遍历提取其存储的元组,也可以向下面程序这样,通过调用 list() 函数将 zip() 对象强制转换成列表:
假设有三个长度不同的列表 a、b、c,可以使用 for 循环和 zip 函数将它们对应的元素一一输出。zip 函数可以将多个列表中的元素一一配对,生成一个元组的列表。
示例代码:
a = [1, 2, 3, 4]
b = ['a', 'b', 'c']
c = [True, False]
# 将三个列表对应的元素一一输出
print("三个列表对应的元素:")
for x, y, z in zip(a, b, c):
print(x, y, z)
运行结果:
需要注意的是,如果列表的长度不一致,zip 函数会以最短的列表长度为准,超出部分的元素将会被忽略。在上面的例子中,列表 c 的长度比其他两个列表要短,因此最后一个元素的值为 None。
如果要将最长的列表的数据全部输出,可以先找到最长的列表长度,然后使用 range 函数循环这个长度,对于每个列表,如果下标超出了它的长度范围,就用空字符串代替。例如:
示例代码:
a = [1, 2, 3, 4]
b = ['a', 'b', 'c']
c = [True, False]
# 找到最长的列表长度
max_length = max(len(a), len(b), len(c))
# 将三个列表对应的元素一一输出
print("三个列表对应的元素:")
for i in range(max_length):
x = a[i] if i < len(a) else ''
y = b[i] if i < len(b) else ''
z = c[i] if i < len(c) else ''
print(x, y, z)
运行结果: