python - 如何遍历列表并检索最小值的索引但忽略输出列表中的重复项?

标签 python python-3.x

我是编程新手。有人可以帮我查询吗?提前致谢 假设我们有一个列表 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/

相关文章:

python - "No module named ' _sqlite3 '"运行 Django 's "python3 Manage.py migrate 时”

python - 错误: Could not locate a Flask application in VSCode

python - 将单元格值映射或替换为 pandas 中相应的字符串值

python - 如何避免在此递归函数中使用全局变量并改进我的代码?

python - Pandas - 在数据框中添加一个标志列

python - NumPy,运行时警告: invalid value encountered in power. How can I get see the value of my variables?

python - 来自 Python 计数表的箱线图

python - 如何在shell脚本中执行python3程序

python - 使用另一个模块中导入的库的方法

python - 在 Pandas 数据框中检索 NaN 值的索引