可以在不同长度的iterable上使用列表推导吗?

时间:2015-02-13 18:09:18

标签: python list-comprehension

是否可以通过列表推导创建列表,该列表使用compound Boolean expression,其中至少有一个条件假定存在来自底层可迭代元素的索引值(即使另一个条件不是& #39; t和(应该?)导致表达式为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')]

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

  

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

     

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

     

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

这仍有潜在的错误。可能有一个零长度元组,这将导致错误。这可能不是基于其余代码的问题,但如果是,则应使用:

编辑排除零长度元组

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