python - 如何迭代多个不同长度的列表,但重复较短列表的最后一个值,直到完成最长列表?

标签 python python-3.x list iterator

在我的 Python 3 脚本中,我试图根据输入组合来自三个不同列表的三个数字。如果列表大小相同,则 zip 没有问题。但是,我希望能够为特定列表输入单个数字,并且脚本可以重复该数字,直到最长的列表完成。这可以通过 zip_longest 完成。但是,使用 fillvalue 不可能为单独的列表使用单独的填充值。
以这个简单的脚本为例:

from itertools import zip_longest

list1=[1]
list2=[4, 5, 6, 7, 8, 9]
list3=[2]
for l1, l2, l3 in zip_longest(list1, list2, list3):
     print(l1, l2, l3)
这是实际结果:
# 1    4 2
# None 5 None                                                        
# None 6 None                                                         
# None 7 None
# None 8 None
# None 9 None  
这将是我想要的结果:
# 1 4 2
# 1 5 2                                                        
# 1 6 2                                                         
# 1 7 2
# 1 8 2
# 1 9 2                                                        
 
我已经通过手动创建不同的 for 循环并询问列表是否为常量来完成此特定任务,但是 zip_longest 与我所需要的非常接近,我想知道我是否遗漏了一些明显的东西。

最佳答案

您可以使用逻辑 or 运算符来使用较短列表的最后一个元素:

from itertools import zip_longest
list1 = [1]
list2 = ["a", "b", "c", "d", "e", "f"]
list3 = [2]
for l1, l2, l3 in zip_longest(list1, list2, list3):
    print(l1 or list1[-1], l2, l3 or list3[-1])
出去:
1 a 2
1 b 2
1 c 2
1 d 2
1 e 2
1 f 2

关于python - 如何迭代多个不同长度的列表,但重复较短列表的最后一个值,直到完成最长列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65181817/

相关文章:

python - 将json插入mysql。 json 字符串是从 json.dumps 中获取的

python - 如何在 python 中将字符串列表转换为整数?

python - Django 中的 `assertIn` 和 `assertContains` 有什么区别?

python - 如何检查文本文件是否存在并且在python中不为空

python - SQL Server 与 AWS GLUE Python 3 作业的连接

python - Windows 上的错误 "Import Error: No module named numpy"

python - python中的函数模板

python - 使用 Python 对元组中每个给定的第一个值求和元组中的第二个值

python - 在 Python 中获取函数的平均值

java - 在扩展泛型类的类中初始化实例变量