我是编程新手。有人可以帮我查询吗?在此先感谢您说我们有一个列表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]。
答案 0 :(得分:3)
我在这里将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}
首先存储(最小,索引)对,然后以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]