2016-11-15 60 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

谢谢,这个作品也是!欣赏它! –