我有一个如下列表:
A = [1, 2, 3, 4]
使用枚举后,我有以下列表:
A = [(0, 1), (1, 2), (2, 3), (3, 4)]
检查条件后,我意识到我不需要索引为0和2的元素。 这意味着我的条件返回的列表如下所示,每次都可能不同:
condA = [(0, 1), (2, 3)]
我知道我可以使用del
或.pop()
从列表中删除一个元素。
但是,我想知道如何读取condA list
中的数字(0)和(2),并将这些元素从原始列表中删除。
我不想在代码中输入0和2,因为每次它们都不相同。
结果将是这样的:
A_reduced = [2, 4]
谢谢。
答案 0 :(得分:1)
如果要从循环内的列表中删除元素,则应从最后一个迭代到第一个:
for i in range(len(A) - 1, -1, -1):
if true: # replace with condition
del A[i]
更新。
您也可以为此使用列表理解功能,但是您应该颠倒条件(A[i][0] != 11
=> A[i][0] == 11
):
A = [A[i] for i in range(len(A)) if inverted_condition]
答案 1 :(得分:1)
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]
您可以添加所需的任何索引列表,并将其从列表中删除。 (如果存在)
编辑:调整为新值,并修改了功能,以便您还保留原始列表(如果需要)
答案 2 :(得分:1)
如果要从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)
答案 3 :(得分:1)
在condA
中循环,将元素从列表A
中弹出。由于A
的大小在缩小,因此您需要一个计数器来减少索引。确保对condA
进行排序:
A = [1, 2, 3, 4]
condA = [(0, 1), (2, 3)]
i = 0
for item in condA:
A.pop(item[0]-i)
i+=1
#result: [2, 4]