python-3.x 删除列表中的多个元素-使用项目位置列表

ecbunoof  于 2022-11-26  发布在  Python
关注(0)|答案(4)|浏览(170)

我有两张单子。
List1是我尝试格式化的项目列表
List2是List1中需要删除的项位置列表(压缩重复项)
问题似乎是它首先删除第一个位置(9),然后在...之后删除第二个位置(16),而不是同时进行。在它删除9之后,列表被更改,16因此在不同的预期位置被删除。

List1 = ["HST", "BA", "CRM", "QQQ", "IYR", "TDG", "HD", "TDY", "UAL", "CRM", "XOM", "CCL", "LLY", "QCOM", "UPS", "MPW", "CCL", "ILMN", "MU", "GOOGL", "AXP", "IVZ", "WY"]
List2 = [9, 16]

print(List1)
print(List2)

for x in List2:
    List1.pop(x)

print(List1)
xzv2uavs

xzv2uavs1#

你可以对List2进行排序,然后反转(sorted(List2, key=List2.index, reverse=True)),python会从后往前移除这些元素:

List1 = ["HST", "BA", "CRM", "QQQ", "IYR", "TDG", "HD", "TDY", "UAL", "CRM", "XOM", "CCL", "LLY", "QCOM", "UPS", "MPW", "CCL", "ILMN", "MU", "GOOGL", "AXP", "IVZ", "WY"]
List2 = [9, 16]

List2 = sorted(List2, key=List2.index, reverse=True)
for x in List2:
    List1.pop(x)

print(List1)
vbkedwbf

vbkedwbf2#

试试这样东西

List1 = ["HST", "BA", "CRM", "QQQ", "IYR", "TDG", "HD", "TDY", "UAL", "CRM", "XOM", "CCL", "LLY", "QCOM", "UPS", "MPW", "CCL", "ILMN", "MU", "GOOGL", "AXP", "IVZ", "WY"]
List2 = [9, 16]

print(List1)
print(List2)

for i, x in enumerate(List2):
    List1.pop(x-i)

print(List1)
yzxexxkh

yzxexxkh3#

用途:

S = set(List2)

out = [x for i, x in enumerate(List1) if i not in S]
nhhxz33t

nhhxz33t4#

您可以使用enumerate来记录已移除的项目数量,并在清单上寻找它们的新位置。
如果您移除一个项目,则要移除的下一个项目的索引为-1。

for i, j in enumerate(list2):
    list1.pop(i - j)

enumerate返回具有列表值和循环计数的元组。

相关问题