我使用类似的循环删除重复项并尝试更改它以删除“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)
答案 0 :(得分: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]
或者你可以通过在一次点击中完成所有操作来使它更加dry:
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])
我应该提一下:看起来好像你可以通过某种表格格式或字典存储数据,而不是一堆列表。
答案 1 :(得分:0)
我猜测存储在数组中的值是实际的Numerics而不是string。尝试更改代码以检查数字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)