python-3.x - 使用 zip 进行迭代的空光标
问题描述
我有多个用于迭代的游标,但是当其中一个为空时,zip 不起作用。当一个列表为空时,我如何遍历其他列表。示例代码如下所示:
for x, y, p, q in zip(cursor_X, cursor_Y,
cursor_P, cursor_Q):
data1 = x
data2 = y
data3 = p
data4 = q
print(str(data1['data']), end="")
print("\t" + str(data2['data']), end="")
print("\t" + str(data2['data']), end="")
print("\t" + str(data2['data']))
解决方案
您可以使用itertools.zip_longest:
itertools.zip_longest(*iterables, fillvalue=None)
创建一个迭代器,聚合来自每个可迭代对象的元素。如果可迭代的长度不均匀,则用 fillvalue 填充缺失值。迭代一直持续到最长的可迭代对象用完
您没有显示您的数据是什么样子,但为了使其余代码正常工作,您可以使用带有'data'
键和空字符串的 dict 作为缺失数据的值:
from itertools import zip_longest
for x, y, p, q in zip_longest(cursor_X, cursor_Y,
cursor_P, cursor_Q,
fillvalue={'data':''}):
data1 = x
data2 = y
data3 = p
data4 = q
print(str(data1['data']), end="")
print("\t" + str(data2['data']), end="")
print("\t" + str(data2['data']), end="")
print("\t" + str(data2['data']))
请注意,您可以在没有不必要的中间变量的情况下重写循环的内容:
for x, y, p, q in zip_longest(cursor_X, cursor_Y, cursor_P, cursor_Q,
fillvalue={'data':''}):
out = '\t'.join(map(str, (x, y, z, t)))
print(out)
甚至:
for items in zip_longest(cursor_X, cursor_Y, cursor_P, cursor_Q,
fillvalue={'data':''}):
out = '\t'.join(map(str, items))
print(out)
推荐阅读
- c++ - alloca的性能
- excel - 转置动态范围exel VBA
- python - 嵌套对象的更快数据聚合算法
- mysql - promise.resolve 中的 for 循环内的 mySQL 查询不起作用
- flutter - Flutter 无效的插件规范 path_provider_windows
- php - 2020 年使用 PHP 7.2 设置 SMTP 邮件 - 2020 年 PHP 邮件
- django - 有没有办法在“urlpatterns”中添加不记名令牌,以便我也可以在浏览器中使用 Rest API?
- node.js - Socket.io双连接只有一个客户端
- spring - Spring Boot 应用程序在运行 Cloud Task 后如何退出?
- r - 如何在R中的绘图中添加图例