【问题标题】:Python: Get the smallest item from a list inside a listPython:从列表中的列表中获取最小的项目
【发布时间】:2015-11-08 01:36:10
【问题描述】:

假设我有一个名为 data 的列表。

data = [[3.59, ['foo']], [2.34, ['bar', 'foo']]]

现在我想从数据列表中找到索引,索引 0 处的数据列表中的数字是最小的。所以在我的例子中是 0 或 1 但因为 2.34 小于 3.59 它会返回 1

编辑:

这是我想出的,但我认为它不是真正有效的atm。

data = [[3.59, ['foo']], [2.34, ['bar', 'foo']]]
smallest_num_list = []

for list in data:
    for i in list[:1]:
        smallest_num_list.append(i)

for list in data:
    for i in list[:1]:
        if i == min(smallest_num_list):
            result = data.index(list)

print result

【问题讨论】:

  • 你能告诉我们你尝试了什么吗?我们不会为您编写代码。
  • @utdemir 是的,我当然会编辑它。

标签: python


【解决方案1】:

你可以使用enumerate():

idx_min, val_min = min(enumerate(data), key=lambda i, x: x[0])

【讨论】:

  • 如果有几个项目的最小值相同,它会起作用吗?
  • @hyst329,它会返回第一个。
  • @hyst329 这将像min() 函数一样正常工作,这意味着这将返回遇到的第一个最小值。
  • @抱歉,我的意思是别的。如果我们需要所有这样的元素,它会起作用吗?
  • @hyst329 它不起作用,因为min() 只返回一个值。如果您要查找所有最小值,则必须首先对列表进行排序,然后在开头获取组值,如this answer 中所述。
【解决方案2】:

这将起作用并返回此类最小索引的列表(如果超过 1)

[i for i, e in enumerate(list) if e[0] ==  min([d[0] for d in list])]

【讨论】:

  • 这有O(n**2) 的复杂性,这很糟糕,因为问题可以在线性时间内轻松解决。
  • @utdemir 您只能计算一次最小值,因此没有二次复杂度
  • @hyst329:你可以,但你的代码不行。从你的 listcomp 中找出最小值。
  • @hyst329,你不在你的答案中。即使这样,它也会在数据上传递两次,这可以在一次传递中完成。
猜你喜欢
  • 2013-09-20
  • 2020-09-03
  • 1970-01-01
  • 2012-08-09
  • 2015-09-26
  • 2018-07-15
  • 1970-01-01
  • 2021-01-15
相关资源
最近更新 更多