我是编程新手。有人可以帮我查询吗?提前致谢 假设我们有一个列表 a = [1, 2, 23, 40, 15, 61, 27, 8, 19, 10]。我想遍历上面的列表(第一个和最后一个元素除外)并检索每个元素并与上一个和下一个元素进行比较并返回最小值的索引。例如在上面的列表中,将第二个元素 2 与 1 和 23 进行比较,并检索索引值 1(最小值)。然后将 23 与 2 和 40 进行比较,依此类推。通过这样做,我最终得到一个具有重复索引的列表 [0,1,4,7,7,7]。正确的输出列表应该是[0,1,4,7]。
最佳答案
我会使用 set()
这里有 enumerate()
和 min()
:
from operator import itemgetter
a = [1, 2, 23, 40, 15, 61, 27, 8, 19, 10]
result = set(
map(
itemgetter(1),
(
min((a[i - 1], i - 1), (e, i), (a[i + 1], i + 1))
for i, e in enumerate(a[1:-1], start=1)
),
)
)
print(result)
# {0, 1, 4, 7}
首先存储 (min, index) 对,然后在末尾使用 map()
获取索引和 operator.itemgetter()
.
您也可以只使用简单的列表推导式:
result = set(
x[1]
for x in (
min((a[i - 1], i - 1), (e, i), (a[i + 1], i + 1))
for i, e in enumerate(a[1:-1], start=1)
)
)
或者甚至只使用花括号集语法:
result = {
x[1]
for x in (
min((a[i - 1], i - 1), (e, i), (a[i + 1], i + 1))
for i, e in enumerate(a[1:-1], start=1)
)
}
如果你想要一个列表作为最终输出,你可以包装list()
关于最终结果:
print(list(result))
# [0, 1, 4, 7]
关于python - 如何遍历列表并检索最小值的索引但忽略输出列表中的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55545986/