一、基礎操作
列表是Python中一種重要的數據類型,常用於存儲一組數據。在實際應用中,我們常常需要對列表進行分組操作。對於長度相同的數據,可以通過列表推導式實現分組。例如,對於列表[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’],可以按照長度為2的元素分為[[‘a’, ‘b’], [‘c’, ‘d’], [‘e’, ‘f’]]。
>>> data = ['a', 'b', 'c', 'd', 'e', 'f']
>>> N = 2
>>> [data[i:i+N] for i in range(0, len(data), N)]
[['a', 'b'], ['c', 'd'], ['e', 'f']]
上述代碼中,range(0, len(data), N)表示從0開始,步長為N的整數序列,i表示序列中的元素。然後,使用切片操作獲取每組數據,最終得到按照長度為N分組的列表。
二、分組排序
除了按照長度分組,有時候需要按照某種規則對列表進行分組。例如,對於學生考試成績,可以按照分數段進行分組。
>>> scores = [('A', 80), ('B', 90), ('C', 85), ('D', 70), ('E', 95)]
>>> bins = [60, 70, 80, 90, 100]
>>> groups = {f'{i}-{j}': [] for i, j in zip(bins[:-1], bins[1:])}
>>> groups['<60'] = []
>>> for name, score in scores:
... for i, bin in enumerate(bins):
... if score < bin:
... if i == 0:
... groups['<60'].append((name, score))
... else:
... groups[f'{bins[i-1]}-{bin}'].append((name, score))
... break
...
>>> groups
{'<60': [('D', 70)],
'60-70': [],
'70-80': [('A', 80)],
'80-90': [('C', 85), ('B', 90)],
'90-100': [('E', 95)]}
上述代碼中,bins表示分數段,groups是一個字典,用於存儲各個分數段的學生信息。遍歷每個學生的成績,找到其所屬的分數段,然後將其添加到對應分組中。
三、多層分組
有時候需要將列表按照多個維度進行分組操作。例如,對於多個學生的考試成績,可以先按照科目分組,再按照分數段進行分組。
>>> scores = [('math', 'A', 80), ('math', 'B', 90), ('math', 'C', 85),
... ('physics', 'D', 70), ('physics', 'E', 95), ('physics', 'F', 75)]
>>> subjects = set([x[0] for x in scores])
>>> bins = [60, 70, 80, 90, 100]
>>> groups = {s: {f'{i}-{j}': [] for i, j in zip(bins[:-1], bins[1:])} for s in subjects}
>>> for subject, name, score in scores:
... for i, bin in enumerate(bins):
... if score < bin:
... if i == 0:
... groups[subject]['<60'].append((name, score))
... else:
... groups[subject][f'{bins[i-1]}-{bin}'].append((name, score))
... break
...
>>> groups
{'math': {'<60': [], '60-70': [], '70-80': [('A', 80)], '80-90': [('C', 85), ('B', 90)], '90-100': []},
'physics': {'<60': [('D', 70)], '60-70': [], '70-80': [('F', 75)], '80-90': [], '90-100': [('E', 95)]}}}
上述代碼中,subjects表示科目,groups是一個嵌套字典,用於存儲每個科目的學生信息。遍歷每個學生的科目和成績,找到其所屬分數段和科目,然後將其添加到對應分組中。
四、按照首字母分組
有時候需要將列表按照首字母進行分組。例如,將[‘apple’, ‘banana’, ‘cherry’, ‘date’]按照首字母分組為{‘a’: [‘apple’], ‘b’: [‘banana’], ‘c’: [‘cherry’], ‘d’: [‘date’]}。
>>> data = ['apple', 'banana', 'cherry', 'date']
>>> groups = {}
>>> for item in data:
... initial = item[0]
... if initial not in groups:
... groups[initial] = []
... groups[initial].append(item)
...
>>> groups
{'a': ['apple'], 'b': ['banana'], 'c': ['cherry'], 'd': ['date']}
上述代碼中,遍歷列表中的每個元素,取得其首字母,然後根據首字母將元素添加到對應分組中。groups是一個字典,用於存儲各個分組。
五、結語
Python列表分組操作有很多種實現方式,可以根據實際需求選擇不同的方法。例如,對於二維列表,可以使用zip()函數實現分組;對於字符串列表,可以根據首字母進行分組。不同的實現方法有不同的適用場景,在實踐中需要靈活運用。
原創文章,作者:LDIHJ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/315732.html