使用if语句从列表中删除元组

时间:2016-10-15 23:37:33

标签: python

我试图根据其内容从列表中删除元组。这个例子说明了我试图做的事情:

i=[(a,0),(b,''),(c,5)]

目标是在第二个空格中删除具有空值的元组。最终列表如下所示:

i=[(a,0),(c,5)]

我尝试使用代码实现此目的:

for p in i:
    if '' in p[1]:
        i.remove(p)

但是,如果我此时打印i,则列表不会对其进行任何更改。我哪里可能出错?

2 个答案:

答案 0 :(得分:0)

你没有提到它,但你最有可能得到TypeError: argument of type 'int' is not iterable例外,问题是'' in 5完全没有意义。您可能希望改为使用if p[1] == ''

另一个问题是,在您重复使用列表中时,您无法正确删除列表中的元素。

一种可能的解决方案是使用列表解析:

i = [p for p in i if p[1] != '']

答案 1 :(得分:0)

元组的每个成员的第二个元素是不可迭代的(至少对于第一个和最后一个元组),所以你不能在"中使用"在那种情况下。最有可能的是你的" if"语句类似于

if p[1] == '':

最后,如果你纠正我之前提到过的问题,你可以这样做:

i = filter(lambda x: x[1] != '', [(a,0), (b,''), (c,5)]

这是一种更加诡计多端的方式