gpt4 book ai didi

python - 如何在 Python 中仅对列表中的几个值进行排序

转载 作者:太空狗 更新时间:2023-10-29 20:12:16 25 4
gpt4 key购买 nike

假设

A = [9, 5, 34, 33, 32, 31, 300, 30, 3, 256]

我只想对列表中的特定部分进行排序。例如,这里我只想对 [300, 30, 3] 进行排序,这样整个列表就变成了:

A = [9, 5, 34, 33, 32, 31, 3, 30, 300, 256]

假设 B = [300, 30, 400, 40, 500, 50, 600, 60] 那么在排序后它应该是 B = [30, 300, 40, 400, 50, 500, 60, 600]

主要思想如果最左边的数字是相同的 300, 30, 30 而最右边的数字只包含 0 那么我们应该按升序排列它。

另一个例子:

A = [100, 10, 1, 2000, 20, 2]

排序后应该是A = [1, 10, 100, 2, 20, 2000]

任何人都可以建议一些技术来解决此类问题。我列表中的值将始终以这种方式排列 [200, 20, 2, 300, 30, 3, 400, 40, 4]

代码:

nums = [3, 30, 31, 32, 33, 34, 300, 256, 5, 9]
nums = sorted(nums, key=lambda x: str(x), reverse=True)
print nums
>> [9, 5, 34, 33, 32, 31, 300, 30, 3, 256]

但我的最终输出应该是 [9, 5, 34, 33, 32, 31, 3, 30, 300 256]

举个例子:

A = [9, 5, 100, 10, 30, 3, 265, 200, 20, 2]

排序后应该是:

A = [9, 5, 10, 100, 3, 30, 265, 2, 20, 200]

最佳答案

由于每个预期序列都包含作为 then 的公共(public)系数的数字,您可以使用返回公共(public)系数的 scientific_notation 函数。然后您可以根据此函数对您的数字进行分类并将它们连接起来。

>>> from operator import itemgetter
>>> from itertools import chain,groupby

>>> def scientific_notation(number):
... while number%10 == 0:
... number = number/10
... return number

>>> A = [9, 5, 34, 33, 32, 31, 300, 30, 3, 256]
>>> G=[list(g) for _,g in groupby(A,key=scientific_notation)]
>>> list(chain.from_iterable(sorted(sub) if len(sub)>1 else sub for sub in G))
[9, 5, 34, 33, 32, 31, 3, 30, 300, 256]

请注意,由于我们是根据幂的系数对数字进行分类,因此如果子列表的长度大于 1,则意味着它是一个需要排序的预期数字序列。因此,而不是检查长度对于每个序列,您可以简单地将排序应用于分组依据中的所有生成器:

>>> list(chain.from_iterable(sorted(g) for _,g in groupby(A,key=scientific_notation)))
[9, 5, 34, 33, 32, 31, 3, 30, 300, 256]

关于python - 如何在 Python 中仅对列表中的几个值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33822603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com