0

我使用了一个类似的循环来删除重复项并尝试对其进行一些更改,以删除“lastClickRevenue”列中包含“0”值的整行。

代码执行时不会出现任何错误,但它并没有像我希望的那样删除行。任何帮助将非常感激。

    for i in range(len(lastClickRevenue)):
        if lastClickRevenue[i] == "0":                        
            currentRevenueKeywords.pop(i)                           
            sessions.pop(i)                                         
            sales.pop(i)                                            
            lastClickRevenue.pop(i)                                 
            firstClickRevenue.pop(i)                                
4

2 回答 2

1

迭代容器并同时修改它总是一个坏主意。

最好用这样的列表理解来编写它:

lastClickRevenue = [x for x in lastClickRevenue if x != 0]

处理其他的:

currentRevenueKeywords = [x for x,y in zip(currentRevenueKeywords, lastClickRevenue) if y != 0]
sessions = [x for x,y in zip(sessions, lastClickRevenue) if y != 0]
sales = [x for x,y in zip(sales, lastClickRevenue) if y != 0]
firstClickRevenue = [x for x,y in zip(sales, lastClickRevenue) if y != 0]
lastClickRevenue = [x for x in lastClickRevenue if x != 0]

或者,您可以一键完成所有操作,使其更加干燥

currentRevenueKeywords, sessions, sales, firstClickRevenue, lastClickRevenue = zip(*[(a,b,c,d,x) for (a,b,c,d,x) in zip(currentRevenueKeywords, sessions, sales, firstClickRevenue, lastClickRevenue) if x != 0])

我应该提一下:看起来您可以从以某种表格格式或字典而不是一堆列表存储数据中受益。

于 2013-02-19T05:07:57.683 回答
0

我猜你的数组中存储的值是实际的数字而不是字符串。尝试更改代码以检查数字 0 而不是字符串“0”。

我还建议查看过滤器功能,以仅保留满足特定条件的值。

for i in range(len(lastClickRevenue)):
    if lastClickRevenue[i] == 0:                        
        currentRevenueKeywords.pop(i)                           
        sessions.pop(i)                                         
        sales.pop(i)                                            
        lastClickRevenue.pop(i)                                 
        firstClickRevenue.pop(i) 
于 2013-02-19T05:02:21.010 回答