2015-02-10 59 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 

但我認爲,最後一步是因爲你不知道字典或列表的名單尚未;-)