【问题标题】:Python function which takes a list as input and returns list with indices of sorted elementsPython 函数,它将列表作为输入并返回带有排序元素索引的列表
【发布时间】:2018-12-19 22:01:52
【问题描述】:

我正在尝试创建一个 python 函数,其中我给出了一个特定的列表,它返回一个包含元素排序位置的列表(不以 0 开头)。 例如:

list = [9,3,4,1]
function(list) = [4,2,3,1]

list = [2,2,6,5]
function(list) = [1,1,3,2]

【问题讨论】:

  • 您可能是指排序列表中的位置?
  • 复制列表,从中删除重复项,然后对其进行排序。然后循环遍历原始列表,获取排序后的副本中每个元素的索引。
  • StackOverflow 不是免费的编码服务。 SO希望您try to solve your own problem first。请更新您的问题以在minimal reproducible example 中显示您已经尝试过的内容。如需更多信息,请参阅How to Ask,并拨打tour :)
  • @PatrickArtner:请注意,这会导致原始 list 中的值不是唯一的复杂性,并希望重复项共享一个公共索引。重复的输入 list 是唯一的,所以没有出现。
  • 为什么您希望[2,2,6,5] 的输出为[1,1,3,2]。应该是[1,1,4,3] 对吧?因为有两个 2,所以他们都被分配了排名 1。但是他们并列第一名,所以下一个值是第三名,而不是第二名。我的意思是,你可以用任何你想要的方式定义问题,但对我个人来说,这似乎很奇怪。干杯。

标签: python python-3.x algorithm list


【解决方案1】:

创建一个字典,键是列表的元素,值是位置。为了获得唯一值,首先将列表转换为设置

list1 = [2,2,6,5]
d = {x: i for i, x in enumerate(sorted(set(list1)), start=1)}
[d[k] for k in list1]

输出

[1, 1, 3, 2]

【讨论】:

  • OP 提供了两个输入;他们中的第二个不是唯一的,这对它不起作用。
  • @ShadowRanger 实际上,唯一性在这里不是问题。 off-by-one-error 是(范围既增加又偏移)。
  • @ShadowRanger 仍在编辑帖子。不过感谢您的评论
  • @user8408080 集合本身无法以任何有意义的方式排序,但sorted(some_set) 会生成一个包含该集合所有成员的排序列表。
  • @user8408080:在 @AdamSmith 上扩展,sorted 适用于 any 输入可迭代(生成器、字符串等),产生一个全新的 list 已经排序命令。 sorted,如果在 Python 中实现,将完全等同于 def sorted(it, *, key=None, reverse=False): newlist = list(it); newlist.sort(key=key, reverse=reverse); return newlist; “接受输入,生成新的排序 list 输出”设计使其适用于单线许多事物,例如在这种情况下,通过添加对set 的转换以在排序前进行唯一化,从而在list1 中生成唯一值的排序list
猜你喜欢
  • 1970-01-01
  • 2015-11-18
  • 2023-03-26
  • 2021-09-08
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 2021-09-19
  • 2020-12-01
相关资源
最近更新 更多