按个别整数值对整数列表进行排序

时间:2015-02-10 00:24:41

标签: python list sorting integer

我试图通过从每个单独整数中的最后一个元素开始(在将整数转换为字符串之后)来排序随机整数值列表,如下所示:aList = [2241, 350] 24 1 ,35 0 并按如下方式排序到空列表中:

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

返回一个空列表。感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:2)

您尝试解决的更高级别的问题是"按照其基数为10的表示的反转文本对数字列表进行排序。"所以这个:

[2241, 350, 4, 53, 102]

成为这个:

[350, 2241, 102, 53, 4]

您不需要迭代方法,首先按最后一位数排序,然后排序倒数第二位,依此类推。相反,您可以使用Python的内置sorted()函数一次性完成所有操作,该函数采用序列(aList)和key函数并返回一个新的{ {1}}根据list函数返回的值进行排序。这是所需的完整代码:

key

要撰写我们的aList = [2241, 350, 4, 53, 102] def mySortKey(number): return str(number)[::-1] print sorted(aList, key=mySortKey) ,我们将数字转换为字符串,然后反转文本。所以第一个数字变为key。有关我们使用'1422'转发的原因的详细信息,请参阅:Reverse a string in Python

答案 1 :(得分:1)

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

print d

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

答案 2 :(得分:0)

鉴于此清单:

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], [], [], [], []]

然后你可以使用元组解包,如果你真的希望命名变量具有列表的值:

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

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