我试图根据其内容从列表中删除元组。这个例子说明了我试图做的事情:
i=[(a,0),(b,''),(c,5)]
目标是在第二个空格中删除具有空值的元组。最终列表如下所示:
i=[(a,0),(c,5)]
我尝试使用代码实现此目的:
for p in i:
if '' in p[1]:
i.remove(p)
但是,如果我此时打印i
,则列表不会对其进行任何更改。我哪里可能出错?
答案 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)]
这是一种更加诡计多端的方式