Python 如何通过每次都可以更改的索引删除列表中的几个元素?
我的清单如下:Python 如何通过每次都可以更改的索引删除列表中的几个元素?,python,list,indexing,del,Python,List,Indexing,Del,我的清单如下: A = [1, 2, 3, 4] 使用enumerate后,我有以下列表: A = [(0, 1), (1, 2), (2, 3), (3, 4)] 在检查了一个条件之后,我意识到我不需要索引为0和2的元素。 这意味着我的条件返回如下列表,每次都可能不同: condA = [(0, 1), (2, 3)] 我知道我可以使用del或.pop从列表中删除元素。 但是,我想知道如何读取condA列表中的数字,如0和2,并从原始列表中删除这些元素。 我不想在代码中输入0和2,因为
A = [1, 2, 3, 4]
使用enumerate后,我有以下列表:
A = [(0, 1), (1, 2), (2, 3), (3, 4)]
在检查了一个条件之后,我意识到我不需要索引为0和2的元素。
这意味着我的条件返回如下列表,每次都可能不同:
condA = [(0, 1), (2, 3)]
我知道我可以使用del或.pop从列表中删除元素。
但是,我想知道如何读取condA列表中的数字,如0和2,并从原始列表中删除这些元素。
我不想在代码中输入0和2,因为它们每次都会不同
结果如下:
A_reduced = [2, 4]
若要从循环内的列表中删除元素,应从最后一个循环到第一个循环:
for i in range(len(A) - 1, -1, -1):
if true: # replace with condition
del A[i]
Upd
您也可以使用列表理解进行此操作,但您应该将条件A[i][0]颠倒过来11=>A[i][0]==11:
若要从循环内的列表中删除元素,应从最后一个循环到第一个循环:
for i in range(len(A) - 1, -1, -1):
if true: # replace with condition
del A[i]
Upd
您也可以使用列表理解进行此操作,但您应该将条件A[i][0]颠倒过来11=>A[i][0]==11:
IIUC也许函数是正确的方式:
A = [1, 2, 3, 4]
def remove_items(lis, idx):
lis2=lis.copy()
[lis2.pop(i) for i in idx]
return lis2
A_reduced=remove_items(A,[0,2])
输出:
Out[32]: [2, 3]
您可以添加任何您想要的索引列表,它会将它们从列表中删除。如果它们存在
编辑:根据新值进行调整,并修改函数,以便在需要时保留原始列表IIUC也许函数是正确的方法:
A = [1, 2, 3, 4]
def remove_items(lis, idx):
lis2=lis.copy()
[lis2.pop(i) for i in idx]
return lis2
A_reduced=remove_items(A,[0,2])
输出:
Out[32]: [2, 3]
您可以添加任何您想要的索引列表,它会将它们从列表中删除。如果它们存在
编辑:根据新值进行调整,并修改函数,以便在需要时保留原始列表如果要从condA列表中读取索引并创建该编号的列表,则要删除的元素索引列表如下所示:
rm_lst = [x[0] for x in condA]
现在,要从主列表中删除元素,请执行以下操作:
A = [(0, ((11), (12))), (1, ((452), (54))), (2, ((545), (757))), (3, ((42), (37)))]
A_reduced = [x[1] for x in A if x[0] not in rm_lst]
最终代码:
A = [(0, ((11), (12))), (1, ((452), (54))), (2, ((545), (757))), (3, ((42), (37)))]
condA = [(0, ((11), (452))), (2, ((545), (757)))]
rm_lst = [x[0] for x in condA]
A_reduced = [x[1] for x in A if x[0] not in rm_lst]
print(A_reduced)
如果要从condA列表中读取索引并创建该编号的列表,则要删除的元素索引列表如下所示:
rm_lst = [x[0] for x in condA]
现在,要从主列表中删除元素,请执行以下操作:
A = [(0, ((11), (12))), (1, ((452), (54))), (2, ((545), (757))), (3, ((42), (37)))]
A_reduced = [x[1] for x in A if x[0] not in rm_lst]
最终代码:
A = [(0, ((11), (12))), (1, ((452), (54))), (2, ((545), (757))), (3, ((42), (37)))]
condA = [(0, ((11), (452))), (2, ((545), (757)))]
rm_lst = [x[0] for x in condA]
A_reduced = [x[1] for x in A if x[0] not in rm_lst]
print(A_reduced)
循环condA,将元素从列表A中弹出。由于A的大小正在缩小,您需要一个计数器来减少索引。确保对condA进行排序:
循环condA,将元素从列表A中弹出。由于A的大小正在缩小,您需要一个计数器来减少索引。确保对condA进行排序:
真的只需将其总结为您的输入和所需的输出。请帮我们和你自己一个忙,去掉所有多余的括号。@Blorgbeard重点是我可以查看condA列表并确定我不需要的元素。但是必须有一种更有效的方法来去除康达所展示的元素。真的很抱歉给您带来不便???只需将其总结为您的输入和所需的输出。请帮我们和你自己一个忙,去掉所有多余的括号。@Blorgbeard重点是我可以查看condA列表并确定我不需要的元素。但是必须有一种更有效的方法来去除康达所展示的元素。很抱歉给您带来不便