【问题标题】:How does val, idx = min((val, idx) for (idx, val) in enumerate(my_list)) work?val, idx = min((val, idx) for (idx, val) in enumerate(my_list)) 是如何工作的?
【发布时间】:2021-05-24 15:16:38
【问题描述】:

val, idx = min((val, idx) for (idx, val) in enumerate(my_list))

此语句给出最小值和该最小值的索引。我很想知道这是如何工作的。

我做了type((value, index) for index, value in enumerate(percent_chance_per_stock) if value > 0) 并得到了<class 'generator'>。它如何与 min 函数配合使用并返回一个元组?

【问题讨论】:

  • 看起来很简单,但要真正理解它,请参阅Understanding generators in Python - Stack Overflow
  • 您还必须知道如何执行元组比较。
  • 我确实看到了您发布的链接,并且我已经知道生成器,但无法弄清楚它是如何工作的。我刚接触 python,当我偶然发现这些东西时,我想知道它们是如何工作的。谢谢,我想我应该看看元组比较。
  • 是不是 min 函数应用于所有元组的第一个元素,当找到最小值时,它只返回那个元组?
  • 嗨,@FrankShrestha - 你现在明白了吗?还是需要解释一下?

标签: python tuples generator min


【解决方案1】:

如果不使用generator expression,以下是分步操作:

>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 0, 9]
>>> #                              ^     <- '0' is the smallest num. @8th pos.
>>> # the generator version: saving the tmp_list and faster
>>> val, idx = min((val, idx) for idx, val in enumerate(lst))
>>> print(f' minimum num: {val}, position: {idx} ')
 minimum num: 0, position: 8 
>>> # now it's more steps for storing the num->idx in the tmp_list first:
>>> tmp_lst = []
>>> for idx, val in enumerate(lst):
    tmp_lst.append((val, idx)) # store num, idx but in reverse order

    
>>> tmp_lst
[(1, 0), (2, 1), (3, 2), (4, 3), (5, 4), (6, 5), (7, 6), (8, 7), (0, 8), (9, 9)]
>>> min(tmp_lst)   # gives the (nums, idx)  It works, since tuple comp. by order
(0, 8)
>>> 

【讨论】:

    猜你喜欢
    • 2022-07-01
    • 2022-01-23
    • 2019-08-03
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多