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列表并确定我不需要的元素。但是必须有一种更有效的方法来去除康达所展示的元素。很抱歉给您带来不便