前言:
现在我们对“python二维list排序”大约比较注意,你们都需要分析一些“python二维list排序”的相关资讯。那么小编在网摘上汇集了一些关于“python二维list排序””的相关内容,希望各位老铁们能喜欢,同学们快快来学习一下吧!两种排序方法:sort和sorted
分别举例说明一下:sort
words = ['forest', 'wood', 'tool', 'arc', 'sky', 'poor', 'cloud', 'rock']vals = [2, 1, 0, 3, 4, 6, 5, 7]words.sort()print(words)vals.sort()print(vals)
输出结果:
['arc', 'cloud', 'forest', 'poor', 'rock', 'sky', 'tool', 'wood'][0, 1, 2, 3, 4, 5, 6, 7]
再看sorted,举例如下:
words = ['forest', 'wood', 'brisk', 'tree', 'sky', 'cloud', 'rock', 'falcon']sorted_words = sorted(words)print('Original:', words)print('Sorted:', sorted_words)
输出结果也如下:
Original: ['forest', 'wood', 'brisk', 'tree', 'sky', 'cloud', 'rock', 'falcon']Sorted: ['brisk', 'cloud', 'falcon', 'forest', 'rock', 'sky', 'tree', 'wood']
我们再来看看python列表中的升序和降序排列。
Python列表中的升序/降序排序。
升序/降序由reverse选项控制,举例说明,如下:
words = ['forest', 'wood', 'tool', 'arc', 'sky', 'poor', 'cloud', 'rock']words.sort()print(words)words.sort(reverse=True)print(words)
执行结果如下:
['arc', 'cloud', 'forest', 'poor', 'rock', 'sky', 'tool', 'wood']['wood', 'tool', 'sky', 'rock', 'poor', 'forest', 'cloud', 'arc']
Python列表中的日期排序。
from datetime import datetimevalues = ['8-Nov-19', '21-Jun-16', '1-Nov-18', '7-Apr-19']values.sort(key=lambda d: datetime.strptime(d, "%d-%b-%y"))print(values)
输出结果:
['21-Jun-16', '1-Nov-18', '7-Apr-19', '8-Nov-19']
Python按元素索引排序列表
Python列表可以包含嵌套的可迭代项。 在这种情况下,我们可以选择应排序的元素。
vals = [(4, 0), (0, -2), (3, 5), (1, 1), (-1, 3)] vals.sort()print(vals)vals.sort(key=lambda e: e[1])print(vals)
该示例首先按嵌套元素的第一个元素排序,然后按第二个元素排序。
vals.sort(key=lambda e: e[1])
通过提供一个返回元组第二个元素的匿名函数,我们按元组的第二个值对元组进行排序。
输出结果如下:
[(-1, 3), (0, -2), (1, 1), (3, 5), (4, 0)][(0, -2), (4, 0), (1, 1), (-1, 3), (3, 5)]
Python按嵌套列表的总和排序列表
假设我们有嵌套的列表,它们都有一些不同的排名。 最终排名是所有值的总和,举例如下:
data = [[10, 11, 12, 13], [9, 10, 11, 12], [8, 9, 10, 11], [10, 9, 8, 7], [6, 7, 8, 9], [5, 5, 5, 1], [5, 5, 5, 5], [3, 4, 5, 6], [10, 1, 1, 2]]data.sort()print(data)data.sort(key=sum)print(data)
默认情况下,排序功能按嵌套列表的第一个值排序。 为了实现我们的目标,我们将内置的sum函数传递给key选项。
输出结果如下:
[[3, 4, 5, 6], [5, 5, 5, 1], [5, 5, 5, 5], [6, 7, 8, 9], [8, 9, 10, 11], [9, 10, 11, 12], [10, 1, 1, 2], [10, 9, 8, 7], [10, 11, 12, 13]][[10, 1, 1, 2], [5, 5, 5, 1], [3, 4, 5, 6], [5, 5, 5, 5], [6, 7, 8, 9], [10, 9, 8, 7], [8, 9, 10, 11], [9, 10, 11, 12], [10, 11, 12, 13]]
上面的实例显示了默认排序和自定义排序。
Python本地化字符串排序列表
对于支持区域设置的排序,我们可以将locale.strxfrm()用于关键函数。
import localewords = ['zem', 'čučoriedka', 'drevo', 'štebot', 'cesta', 'černice', 'ďateľ', 'rum', 'železo', 'prameň', 'sob']locale.setlocale(locale.LC_COLLATE, ('sk_SK', 'UTF8'))words.sort(key=locale.strxfrm)for word in words: print (word)
该示例对斯洛伐克语单词Slovak words.进行排序,输出结果如下:
cestačernicečučoriedkaďateľdrevoprameňrumsobštebotzemželezo
注意:斯洛伐克语Slovak words单词的结果顺序并不完全正确。 字母ď在d之后。 这取决于对语言的支持程度。
Python列表中的字典排序.
在对字典进行排序时,我们可以选择执行排序的属性。
users = [ {'name': 'John Doe', 'date_of_birth': 1987}, {'name': 'Jane Doe', 'date_of_birth': 1996}, {'name': 'Robert Brown', 'date_of_birth': 1977}, {'name': 'Lucia Smith', 'date_of_birth': 2002}, {'name': 'Patrick Dempsey', 'date_of_birth': 1994}]users.sort(reverse=True, key=lambda e: e['date_of_birth']) for user in users: print(user)
我们有一个用户users列表。 每个users用户列表由几个字典表示。
users.sort(reverse=True, key=lambda e: e['date_of_birth'])
在匿名函数中,我们选择date_of_birth属性,输出结果如下:
{'name': 'Lucia Smith', 'date_of_birth': 2002}{'name': 'Jane Doe', 'date_of_birth': 1996}{'name': 'Patrick Dempsey', 'date_of_birth': 1994}{'name': 'John Doe', 'date_of_birth': 1987}{'name': 'Robert Brown', 'date_of_birth': 1977}
用户按照出生日期降序排序。
Python成绩列表排序
世界各地有各种分级系统。 我们的示例包含A +或C-等等级,因此无法按字典顺序排序。 我们使用一个字典,其中每个年级都有其给定的值。
data = 'A+ A A- B+ B B- C+ C C- D+ D'grades = { grade: idx for idx, grade in enumerate(data.split()) } def mc(e): return grades.get(e[1])students = [('Anna', 'A+'), ('Jozef', 'B'), ('Rebecca', 'B-'), ('Michael', 'D+'), ('Zoltan', 'A-'), ('Jan', 'A'), ('Michelle', 'C-'), ('Sofia', 'C+')]print(grades)students.sort(key=mc)print(students)# from operator import itemgetter# students.sort(key=lambda e: itemgetter(e[1])(grades))
输出结果如下:
{'A+': 0, 'A': 1, 'A-': 2, 'B+': 3, 'B': 4, 'B-': 5, 'C+': 6, 'C': 7, 'C-': 8, 'D+': 9, 'D': 10}[('Anna', 'A+'), ('Jan', 'A'), ('Zoltan', 'A-'), ('Jozef', 'B'), ('Rebecca', 'B-'), ('Sofia', 'C+'), ('Michelle', 'C-'), ('Michael', 'D+')]
Python按字符串长度排序列表
有时,我们需要按字符串的长度对其进行排序。
def w_len(e): return len(e)words = ['forest', 'wood', 'tool', 'sky', 'poor', 'cloud', 'rock', 'if']words.sort(reverse=True, key=w_len)print(words)
在此示例中,我们不使用匿名函数。
def w_len(e): return len(e)
w_len函数返回每个元素的长度,输出结果为:
['forest', 'cloud', 'wood', 'tool', 'poor', 'rock', 'sky', 'if']单词按其长度降序排列。
默认情况下,首字母大写的字符串排在其他字符串之前。 无论大小写如何,我们都可以对字符串进行排序。
text = 'Today is a beautiful day. Andy went fishing.'words = text.replace('.', '')sorted_words = sorted(words.split(), key=str.lower)print('Case insensitive:', sorted_words)sorted_words2 = sorted(words.split())print('Case sensitive:', sorted_words2)
通过为key属性提供str.lower函数,我们执行不区分大小写的排序,输出结果如下:
Case insensitive: ['a', 'Andy', 'beautiful', 'day', 'fishing', 'is', 'Today', 'went']Case sensitive: ['Andy', 'Today', 'a', 'beautiful', 'day', 'fishing', 'is', 'went']
Python姓氏排序列表
在以下示例中,我们按姓氏对名称进行排序。
names = ['John Doe', 'Jane Doe', 'Robert Brown', 'Robert Novak', 'Lucia Smith', 'Patrick Dempsey', 'George Marshall', 'Alan Brooke', 'Harold Andras', 'Albert Doe']names.sort()names.sort(key=lambda e: e.split()[-1])for name in names: print(name)
上面我们有一个名字列表。 每个名称都由名字和姓氏组成。 此外,还有几个姓氏相同的用户。 在这种情况下,我们希望按名字对它们进行排序。
names.sort()names.sort(key=lambda e: e.split()[-1])
首先,我们按名字对名字进行排序。 然后,我们按照名字的姓氏对其进行排序。 为此,我们分割每个字符串并选择最后一个字符串(索引为-1)。由于Python的排序算法稳定,因此记住了第一个排序并获得了预期的输出,结果如下:
Harold AndrasAlan BrookeRobert BrownPatrick DempseyAlbert DoeJane DoeJohn DoeGeorge MarshallRobert NovakLucia Smith
名称按其姓氏排序。 Doe用户按其名字正确排序。
Python 列表中的namedtuples.
在下一个示例中,我们对namedtuple进行排序,我们新建一个namedtuple_sort.py文件:
from typing import NamedTupleclass City(NamedTuple): id: int name: str population: intc1 = City(1, 'Bratislava', 432000)c2 = City(2, 'Budapest', 1759000)c3 = City(3, 'Prague', 1280000)c4 = City(4, 'Warsaw', 1748000)c5 = City(5, 'Los Angeles', 3971000)c6 = City(6, 'Edinburgh', 464000)c7 = City(7, 'Berlin', 3671000)cities = [c1, c2, c3, c4, c5, c6, c7]cities.sort(key=lambda e: e.name)for city in cities: print(city)
城市namedtuple具有三个属性:id,名称和人口。 该示例按名称元组的名称排序。
cities.sort(key=lambda e: e.name)
匿名函数返回namedtuple的name属性,输出结果如下:
City(id=7, name='Berlin', population=3671000)City(id=1, name='Bratislava', population=432000)City(id=2, name='Budapest', population=1759000)City(id=6, name='Edinburgh', population=464000)City(id=5, name='Los Angeles', population=3971000)City(id=3, name='Prague', population=1280000)City(id=4, name='Warsaw', population=1748000)
Python列表中的多种条件排序
下面的示例通过两个排序标准对学生列表进行排序。
from typing import NamedTuplefrom operator import attrgetterdef multi_sort(data, specs): for key, reverse in reversed(specs): data.sort(key=attrgetter(key), reverse=reverse) return dataclass Student(NamedTuple): id: int name: str grade: str age: ints1 = Student(1, 'Patrick', 'A', 21)s2 = Student(2, 'Lucia', 'B', 19)s3 = Student(3, 'Robert', 'C', 19)s4 = Student(4, 'Monika', 'A', 22)s5 = Student(5, 'Thomas', 'D', 20)s6 = Student(6, 'Petra', 'B', 18)s6 = Student(7, 'Sofia', 'A', 18)s7 = Student(8, 'Harold', 'E', 22)s8 = Student(9, 'Arnold', 'B', 23)students = [s1, s2, s3, s4, s5, s6, s7, s8]multi_sort(students, (('grade', False), ('age', True)))for student in students: print(student)
输出结果为:
Student(id=4, name='Monika', grade='A', age=22)Student(id=1, name='Patrick', grade='A', age=21)Student(id=7, name='Sofia', grade='A', age=18)Student(id=9, name='Arnold', grade='B', age=23)Student(id=2, name='Lucia', grade='B', age=19)Student(id=3, name='Robert', grade='C', age=19)Student(id=5, name='Thomas', grade='D', age=20)Student(id=8, name='Harold', grade='E', age=22)
Python自定义复杂对象的排序列表-硬币袋bags of coins
我们有一个自定义对象,一个namedtuple,它具有特定的排序方式。
注意:根据Python文档,进行排序时,sort和sorted仅使用__lt__ magic方法。 因此,我们仅需要实现此方法。 但是,PEP8建议执行所有六个操作(__eq__,__ne__,__lt__,__le__,__gt__,__ge__)以确保代码的安全性和完整性。
functools模块中的total_ordering装饰器有助于减少样板。 total_ordering需要实现__eq__和其余方法之一,新建一个sort_coins.py文件,如下:
from typing import NamedTuplefrom functools import total_ordering# a gold coin equals to two silver and six bronze coinsclass Coin(NamedTuple): rank: str@total_orderingclass Pouch: def __init__(self): self.bag = [] def add(self, coin): self.bag.append(coin) def __eq__(self, other): val1, val2 = self.__evaluate(other) if val1 == val2: return True else: return False def __lt__(self, other): val1, val2 = self.__evaluate(other) if val1 < val2: return True else: return False def __str__(self): return f'Pouch with: {self.bag}' def __evaluate(self, other): val1 = 0 val2 = 0 for coin in self.bag: if coin.rank == 'g': val1 += 6 if coin.rank == 's': val1 += 3 if coin.rank == 'b': val1 += 1 for coin in other.bag: if coin.rank == 'g': val2 += 6 if coin.rank == 's': val2 += 3 if coin.rank == 'b': val2 += 1 return val1, val2def create_pouches(): p1 = Pouch() p1.add(Coin('g')) p1.add(Coin('b')) p1.add(Coin('s')) p2 = Pouch() p2.add(Coin('g')) p2.add(Coin('s')) p3 = Pouch() p3.add(Coin('b')) p3.add(Coin('s')) p3.add(Coin('s')) p4 = Pouch() p4.add(Coin('b')) p4.add(Coin('s')) p5 = Pouch() p5.add(Coin('g')) p5.add(Coin('s')) p5.add(Coin('s')) p5.add(Coin('b')) p5.add(Coin('b')) p5.add(Coin('b')) p6 = Pouch() p6.add(Coin('b')) p6.add(Coin('b')) p6.add(Coin('b')) p6.add(Coin('b')) p6.add(Coin('b')) p7 = Pouch() p7.add(Coin('g')) p8 = Pouch() p8.add(Coin('g')) p8.add(Coin('g')) p8.add(Coin('s')) bag = [p1, p2, p3, p4, p5, p6, p7, p8] return bagbag = create_pouches()bag.sort()for e in bag: print(e)
输出结果为:
Pouch with: [Coin(rank='b'), Coin(rank='s')]Pouch with: [Coin(rank='b'), Coin(rank='b'), Coin(rank='b'), Coin(rank='b'), Coin(rank='b')]Pouch with: [Coin(rank='g')]Pouch with: [Coin(rank='b'), Coin(rank='s'), Coin(rank='s')]Pouch with: [Coin(rank='g'), Coin(rank='s')]Pouch with: [Coin(rank='g'), Coin(rank='b'), Coin(rank='s')]Pouch with: [Coin(rank='g'), Coin(rank='s'), Coin(rank='s'), Coin(rank='b'), Coin(rank='b'), Coin(rank='b')]Pouch with: [Coin(rank='g'), Coin(rank='g'), Coin(rank='s')]
这一小节的知识点有点多,大家不妨慢慢消化一下,哪里不懂的可以查下资料或者私聊我都是可以的,写作不容易,比较费脑子,写出来的东西希望对大家有用,不然的话,那就是无用功啊
标签: #python二维list排序 #pythonlist数字排序 #python怎么对字典进行排序 #如何用python排序并只输出前几个 #pythonlist排序