可以对不同长度的迭代使用列表理解吗?

Possible to use list comprehension over iterable with different lengths?

是否可以通过使用 compound Boolean expression 的列表推导来创建列表,它至少有一个条件假设存在来自底层可迭代元素的索引值(即使另一个条件不存在)并且(应该?)导致表达式为 True)?

解释器在执行下面的代码时抛出 IndexError: tuple index out of range

my_lst = [('30', ), ('30', '125'), ('30', '127'), ('30', '125', '567')]
[tpl for tpl in my_lst if (len(tpl) == 1 or tpl[2] == '125')]
# Desired result: [('30', ), ('30', '125'), ('30', '125', '567')]

Python 索引是从 0 开始的。索引 2 将检索 第三个 项目,而不是第二个。

您要访问索引 1(第二项):

[tpl for tpl in my_lst if (len(tpl) == 1 or tpl[1] == '125')]

Python indexes are 0-based. Index 2 would retrieve the third item, not the second.

You want to access index 1 (the second item):

[tpl for tpl in my_lst if (len(tpl) == 1 or tpl[1] == '125')]

这仍然有一个潜在的错误。可能有一个零长度的元组,这会导致错误。根据您的其余代码,这可能不是问题,但如果是,您应该使用:

编辑为排除零长度元组

[tpl for tpl in my_lst if (len(tpl) != 0 and (len(tpl) == 1 or tpl[1] == '125'))]