我有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)
我有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)
你試過了嗎?
打破這一點會讓你很好的理解python變量解包,列表解析以及zip
的工作方式。
x,y, radius = zip(*[(i,j,r) for i,j,r in zip(x,y,radius) if r != 0])
你可以使用list.index
得到0
元素的索引中radius
,然後就從radius
,x
和y
刪除:
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
進行循環。
這也應該工作,但它具有二次複雜性。 –
這將是一個列表理解一個很好的例子:
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)
在刪除的說法,你給實際的項目,沒有項目索引。使用刪除 – Ejaz