2016-11-15 43 views
2

我一直在尋找,但還沒有找到任何符合我要找的線程。我正在嘗試做的是按3種不同的選項進行排序,Chronological(原始列表),Alphabetical和Reversed排序。 所有這些,我已經想通了,比如這裏是我的清單:Python,從我們的原始形式排序我的列表

movies = ["Star Wars", "Hamilton", "Fight club", "Beck", "Wallander"] 

這裏是我的代碼:

def print_movies(): 
    global movies 
    j = 0 
    while j < 1: 
     print("Hur vill du skriva ut filmerna?") 
     print("1. Kronologisk\n2. Alfabetisk stigande\n3. Alfabetisk fallande") 
     choice = input() 
     if int(choice) == 1:  
      print("Filmer i samlingen just nu:\n") 
      for i in movies: 
       print(i) 
       j = j+1 
     elif int(choice) == 2: 
      print("Filmer i samlingen just nu:\n") 
      movies.sort() 
      for i in movies: 
       print(i) 
       j = j+1 
     elif int(choice) == 3: 
      print("Filmer i samlingen just nu:\n") 
      movies.sort(reverse=True) 
      for p in movies: 
       print(p) 
       j = j+1 
     else: 
      print("Not a valid option, try again") 

的排序,一切工作正常,但是當我如按: 2,按字母排序,按字母順序打印,當我按下:1時,下一次,它不會回到按時間順序排列。 所以選項2名3的作品很好,它可以從最高的字母字符排序在逆排序,但它不會回到它原來的列表形式,並通過我的意思是:

["Star Wars", "Hamilton", "Fight club", "Beck", "Wallander"] 

當我按下:1,其仍然按照我之前輸入的選項2或3排序。

真的很感謝這裏的幫助。 謝謝!

+5

所以,你怎麼知道他們是按時間順序?你告訴Python對列表進行排序,所以原始順序*不見*。如果您需要原始訂單,請保留從未排序的列表的副本,或將信息添加到您的數據以按時間順序排序。 –

+0

對不起,我的英文,按時間順序我的意思是它在第一個列表中的順序。列表中的原始順序。 –

+2

那是因爲你正在排序'in place'。也就是修改原始列表。按時間順序,你想保持原來的秩序。因此,對於選項2和3,不是'movies.sort',而是'new_movies = sorted(電影)'。選項1仍然可以從電影本身顯示。 – algrebe

回答

5

movies.sort()修改列表。所以你會失去原來的順序。

改爲嘗試for m in sorted(movies):

+0

謝謝!欣賞它! –

1

只需複製一份清單,因爲movies.sort()修改爲原始清單。

copyMovies = movies[:] 

下面是一個例子:

>>> movies = ["Star Wars", "Hamilton", "Fight club", "Beck", "Wallander"] 
>>> copyMovies = movies[:] 
>>> movies.sort() 
>>> movies 
['Beck', 'Fight club', 'Hamilton', 'Star Wars', 'Wallander'] 
>>> copyMovies 
['Star Wars', 'Hamilton', 'Fight club', 'Beck', 'Wallander'] 
>>> 
+0

謝謝,這個作品也是!欣賞它! –