我有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