在 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)
给定员工分数列表。选择得分列表中前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)