2015-02-10 50 views
-1

我想排序一个随机整数值的列表,如下所示:aList = [2241, 350]从每个单独整数的最后一个元素开始(将整数转换为字符串后)24 , 35 和排序为空列表,像这样:整数列表的整数值由个别整数值

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 

它返回一个空列表。任何帮助表示赞赏,谢谢。

回答

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

print d 

可以做你想做的(虽然仔细观察,我相信你想@ JohnZwinck的解决方案)

+0

我究竟想你的答案是比约翰更正确Zwinck – dawg 2015-02-10 00:57:08

2

你正在试图解决更高层次的问题是“由逆转文本排序号码清单他们的基数为10的代表“。所以这个:

[2241, 350, 4, 53, 102] 

变为这样:

[350, 2241, 102, 53, 4] 

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

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

+0

哦方式阅读后面的线....我以为他只是想把他们(+1) – 2015-02-10 00:42:04

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

然后你可以使用tuple解包,如果你真的希望命名变量hav Ë然后将列表中的值:

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

但我认为,最后一步是因为你不知道字典或列表的名单尚未;-)