在 python 中切片后获取列表中特定元素的索引

Getting the index of specific element in a list after slicing in python

给定员工分数列表。选择得分列表中前k名员工或后k名员工中得分最高的员工。然后从列表中删除。

我想获取所选元素的真实索引。

score=[5, 12, 15, 11, 15]
k=2
max_value = max(max(score[:k]), max(score[-k:]))
index=score.index(max_value)
print(index)
score.remove(score[index])
print(score)

输出是:

2
[5, 12, 11, 15]

所需的输出:

4
[5,12,15,11]

问题是 index() 会 return 第一次出现。我知道枚举可能是一种解决方案,但我无法在我的代码中应用它。

您似乎想从列表中删除最后一个最高值

您需要找到最大值的所有索引,然后只需使用最后一个索引从列表中删除该项目:

max_val_indices = [i for i, x in enumerate(score) if x == max(score)] # max_val_indices = [2, 4]
score.remove(max_val_indices) # score = [5,12,15,11]
print(max_val_indices[-1:], score) # desired output: 4 [5,12,15,11]

One-liner:

score.remove([i for i, x in enumerate(score) if x == max(score)][-1:]) # score = [5,12,15,11]

感谢您编辑您的问题。我想我现在明白你想要什么了。当然,这可以通过删除一些变量来缩短。我把它们留在那里是为了让代码更清晰。

score = [5, 15, 12, 15, 13, 11, 15]

k = 2

first = score[:k]
last = score[-k:]

cut = [*first, *last]
max_value = max(cut)

for i in range(len(score)):
    if (i < k or i >= len(score)-k) and score[i] == max_value:
        score.pop(i)
        break

print(score)