名單

2015-07-21 47 views
-3

的Python的排序名單假設我有這個名單:名單

newlis = [[3, 6, 4, 10], [1, 9, 2, 5], [0, 7, 8]] 

我想它,每個列表排序的方式進行排序。例如:

newlis = [[3, 4, 6, 10], [1, 2, 5, 9], [0, 7, 8]] 

我試着寫這樣的代碼:

for i in range(len(newlis)): 
    if j in newlis[i] < newlis[i+1]: 
     newlis[i],newlis[i+1]=newlis[i+1],newlis[i] 
print newlis 

它不工作,雖然。有人可以幫我嗎?內置函數是不允許的。

+1

爲什麼沒有內置函數允許嗎? –

+0

嘗試閱讀有關排序算法。 – raymelfrancisco

+3

我會非常想嘗試自己實現[mergesort](https://en.wikipedia.org/wiki/Merge_sort),然後在'newlis'中爲'newlis = [mergesort(i)]' – NightShadeQueen

回答

2

這裏有很多錯誤(其中,這聽起來像是一個家庭作業問題,我們不應該回應這些問題),但我會給你一些有用的建議: 您正在比較列表I中的元素J要列出I + 1

你想在名單列表一比較單元j我到單元j + 1

而且,你似乎是試圖向後排序。你會最終左大右小。

此外,這不是一個排序算法。當你有一個陣列時會發生什麼,如

[3,6,4,10] => [6,4,10,3] 

這是仍然沒有排序,根本。排序算法很簡單,但並不那麼簡單。我建議查找它們。

+0

另外,檢查你的語法,你試圖簡化內循環,但列表中的j不返回任何東西。正確的語法是'對於範圍內的j(len(i) - 1):如果i [j] Javeed

0

if j in newlis[i] < newlis[i+1]:中,您比較了子列表而不是子列表本身的元素。您需要兩個循環,一個用於迭代newlis,另一個用於對newlis的每個子列表中的元素進行排序。

樣本使用Bubble Sort

You can test it here:

>>> newlis = [[3, 6, 4, 10], [1, 9, 2, 5], [0, 7, 8]] 

>>> for sublist in newlis: 
...  for i in range(len(sublist) - 1): 
...   if sublist[i] > sublist[i + 1]: 
...    sublist[i], sublist[i + 1] = sublist[i + 1], sublist[i] 

>>> print(newlis) 
[[3, 4, 6, 10], [1, 2, 5, 9], [0, 7, 8]] 

鏈接關於冒泡排序:

http://www-ee.eng.hawaii.edu/~tep/EE160/Book/chap10/subsection2.1.2.2.html http://www.go4expert.com/articles/bubble-sort-algorithm-absolute-beginners-t27883/