2016-06-10 39 views
-1

我有3个列表,半径,x和y。每一个都是相同的长度。我想从每个列表中删除'i'项,如果'我'的项目在半径等于0.下面是我尝试使用的代码,但由于某种原因不起作用。先谢谢你!如何删除列表中的项目,如果另一个列表中的项目等于0?

for i in range(len(radius)): 
    if radius[i]==0: 
     radius.remove(i) 
     x.remove(i) 
     y.remove(i) 
+1

在删除的说法,你给实际的项目,没有项目索引。使用删除 – Ejaz

回答

1

你试过了吗?

打破这一点会让你很好的理解python变量解包,列表解析以及zip的工作方式。

x,y, radius = zip(*[(i,j,r) for i,j,r in zip(x,y,radius) if r != 0]) 
1

你可以使用list.index得到0元素的索引中radius,然后就从radiusxy删除:

radius = [1, 2, 3, 4, 5, 0, 2] 
x = [2, 3, 4, 5, 6, 7, 8] 
y = [8, 7, 6, 5, 4, 3, 2] 

index = radius.index(0) 

现在,你有index,删除:

del radius[index], x[index], y[index] 

如果存在许多零,则可以将如果index找不到另一个0,则将其与try-catch进行循环。

+1

这也应该工作,但它具有二次复杂性。 –

0

这将是一个列表理解一个很好的例子:

In [1]: x, y, r = [1,2,3,4], [1,2,3,4], [1,0,1,0] 

In [2]: x, y, r = zip(*[xyr_i for xyr_i in zip(x,y,r) if xyr_i[2] != 0]) 

In [3]: print(x) 
(1, 3) 

In [4]: print(y) 
(1, 3) 

In [5]: print(r) 
(1, 1) 
相关问题