可以对不同长度的迭代使用列表理解吗?
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'))]
是否可以通过使用 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'))]