我有一个具有这样布局的多维列表
['Company Name', ['companyemail@email.com']]
['Company Name', ['companyemail@email.com','companyemail@email.com']]
['Company Name', ['companyemail@email.com']]
列表中大约有500行。但是,由于企业环境的低效率,一些供应商还没有提供可靠的联系信息,这就是结果:
['Company Name', ['companyemail@email.com']]
['Company Name', ['companyemail@email.com','companyemail@email.com']]
['Company Name', []]
['Company Name', []]
我创建了一个for循环,用于检查列表中第二个元素是否为空,但是似乎列表中80%的元素都停止了删除应该删除的元素。
我想我知道为什么要这样做,并且因为我的for循环是这样的:
count=0
for k in (list1):
if not list1[count][1]:
list1.pop(count)
else:
count+=1
它曾经是:
count=0
for k in (list1):
if not list1[count][1]:
list1.pop(count)
count+=1
但是我必须更改它,因为我注意到列表中是否有需要删除的项目,并且它们彼此相邻,第二个将被跳过,因为count变量将在项目的位置加1会回去的。
答案 0 :(得分:2)
您可以使用python过滤器来代替for循环。
list(filter(lambda x: x[1]!=[],list1))
使用此过滤器,您可以循环访问列表中的所有元素,并检查第二个元素是否不等于空列表。如果是这样,则保留它,否则将其删除。然后,仅使用此元素创建一个新列表。
答案 1 :(得分:1)
Syrius的回答很不错。如果您想知道代码为什么有问题,可以遍历列表并同时对其进行修改。为防止这种情况,您可以向后遍历列表。在这里,我还使用范围来提供索引而不是计数变量。
for k in range(len(list1) -1, 0, -1):
if not list1[k][1]:
list1.pop(k)
您仍在修改list1,但是修改不会影响连续迭代中发生的操作。
答案 2 :(得分:1)
使用索引删除比使用列表理解要慢得多。您应该以更“ Pythonic”的方式进行操作:
list1 = [ company for company in list1 if company[1] ]