按单个整数值排序整数列表

2024-09-26 17:47:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试对随机整数值列表进行排序,例如:aList = [2241, 350]从每个整数的最后一个元素开始(将整数转换为字符串后)241,350,然后排序为空列表,如下所示:

zeros = [350]
ones = [2241]
twos = []
threes = []
fours = []
fives = []
sixes = []
sevens = []
eights = []
nines = []

然后返回这样一个组合列表:aList = [350, 2241]并再次对其进行迭代以查看整数中的下一个值,并重复此过程,直到列表从最小整数到最大整数排序。你知道吗

这是我目前的代码:

zeros, ones, twos, threes, fours, fives, sixes, sevens, eights, nines = [], [], [], [], [], [], [], [], [], []
for x in range(-1, 0) :
    for val in aList :
        val = str(val)
        if val[x] == 0 :
            zeros.append(val)
        elif val[x] == 1 :
            ones.append(val)
        elif val[x] == 2 :
            twos.append(val)
        elif val[x] == 3 :
            threes.append(val)
        elif val[x] == 4 :
            fours.append(val)
        elif val[x] == 5 :
            fives.append(val)
        elif val[x] == 6 :
            sixes.append(val)
        elif val[x] == 7 :
            sevens.append(val)
        elif val[x] == 8 :
            eights.append(val)
        elif val[x] == 9 :
            nines.append(val)
    aList = zeros + ones + twos + threes + fours + fives + sixes + sevens + eights + nines
    del zeros[:], ones[:], twos[:], threes[:], fours[:], fives[:], sixes[:], sevens[:], eights[:], nines[:]
    return aList

返回一个空列表。谢谢您的帮助。你知道吗


Tags: 列表oneszeros整数valelifappendalist
3条回答

鉴于此列表:

aList = [2241, 350, 255, 12, 50]

您可以使用字典捕获相关的结束字符:

results = {str(n):list() for n in range(10)}
for x in aList:
    results[str(x)[-1]].append(x)
>>> results
{'1': [2241], '0': [350, 50], '3': [], '2': [12], '5': [255], '4': [], '7': [], '6': [], '9': [], '8': []}

然后您可以使用列表理解将其放入列表列表中:

rl=[results[str(x)] for x in range(10)]
>>> rl
[[350, 50], [2241], [12], [], [], [255], [], [], [], []]

如果确实希望命名变量具有列表的Then值,则可以使用元组解包:

zeros, ones, twos, threes, fours, fives, sixes, sevens, eights, nines=rl

但我认为最后一步是因为你还不知道字典或列表;-)

from collections import defaultdict
d = defaultdict(list)
for val in vals:
    d[val%10].append(val)

print d

可能会做你想做的事(尽管经过仔细检查,我相信你想要@JohnZwinck的解决方案)

你要解决的更高层次的问题是“按10进制表示的反文本对数字列表进行排序”

[2241, 350, 4, 53, 102]

变成这样:

[350, 2241, 102, 53, 4]

您不需要一种迭代方法,即先按最后一个数字排序,然后按最后第二个数字排序,依此类推。相反,您可以使用Python内置的sorted()函数一次性完成这一切,该函数接受一个序列(aList)和一个key函数,并返回一个根据key函数返回的值排序的新的list。这是所需的全部代码:

aList = [2241, 350, 4, 53, 102]

def mySortKey(number):
    return str(number)[::-1]

print sorted(aList, key=mySortKey)

为了组成我们的key,我们将数字转换成字符串,然后反转文本。所以第一个数字变成'1422'。有关为什么使用[::-1]反转的更多信息,请参见:Reverse a string in Python。你知道吗

相关问题 更多 >

    热门问题