2016-06-10 53 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) 
相關問題