Python:將列表隨機切分成若干部分
說明
有時候需要隨機對一個列表進行切分,返回多個子列表,這裡寫一個函式split_list
來實現這個功能。
程式碼
下面實現了兩個函式,subset
與 split_list
,其中subset
用來從列表中取出指定下標的元素,而split_list
則用來隨機切分列表成幾等份。
import random
def subset(alist, idxs):
'''
用法:根據下標idxs取出列表alist的子集
alist: list
idxs: list
'''
sub_list = []
for idx in idxs:
sub_list.append(alist[idx])
return sub_list
def split_list(alist, group_num=4, shuffle=True, retain_left=False):
'''
用法:將alist切分成group個子列表,每個子列表裡面有len(alist)//group個元素
shuffle: 表示是否要隨機切分列表,預設為True
retain_left: 若將列表alist分成group_num個子列表後還要剩餘,是否將剩餘的元素單獨作為一組
'''
_index = list(range(len(alist))) # 保留下標
# 是否打亂列表
if shuffle:
index = _index.copy()
random.shuffle(index) # shuffle會改變index的內容,因此需要設定保留下標_index
elem_num = len(alist) // group_num # 每一個子列表所含有的元素數量
sub_lists = {}
# 取出每一個子列表所包含的元素,存入字典中
for idx in range(group_num):
start, end = idx*elem_num, (idx+1)*elem_num
sub_lists['set'+str(idx)] = subset(alist, index[start:end])
# 是否將最後剩餘的元素作為單獨的一組
if retain_left and group_num * elem_num != len(index): # 列表元素數量未能整除子列表數,需要將最後那一部分元素單獨作為新的列表
sub_lists['set'+str(idx+1)] = subset(alist, index[end:])
return sub_lists
用法示例如下:
每一句程式碼後面是該程式碼的輸出結果
print(split_list(range(10), group_num=4, retain_left=False)) # 隨機分成4組,retain_left預設是False
結果:{'set0': [8, 6], 'set1': [0, 5], 'set2': [3, 2], 'set3': [4, 1]}
print(split_list(range(10), group_num=3, retain_left=False)) # 隨機分成3組,最後多餘的元素扔掉不要
結果:{'set0': [9, 5, 8], 'set1': [6, 3, 4], 'set2': [2, 7, 1]}
print(split_list(range(10), group_num=3, retain_left=True)) # 隨機分成3組,最後多餘的元素單獨作為第4組(set3)
結果:{'set0': [4, 2, 1], 'set1': [3, 0, 5], 'set2': [6, 9, 8], 'set3': [7]}
相關文章
- python列表的若干種拼接Python
- python 將一個列表切割成隨機指定長度的多個列表Python隨機
- Python程式碼閱讀(第10篇):隨機打亂列表元素Python隨機
- python生成隨機數、隨機字串Python隨機字串
- js隨機切換背景音樂JS隨機
- Python中如何將列表資料清空?Python
- Python基礎_根據隨機數_按長度_升序或降序排序列表Python隨機排序
- JS 列表 - 隨筆JS
- [NOIP2022] 比賽 隨機排列 部分分隨機
- 演算法隨筆——樹上問題若干演算法
- 實現一個炫酷的隨機標籤排列效果(顏色隨機,大小隨機,成菱形排列的列表)隨機
- Python如何隨機生成1到100的隨機數?Python隨機
- python中如何隨機分配Python隨機
- Python中如何生成隨機數?Python隨機
- python列表Python
- Python生成隨機數random模組Python隨機random
- Python 實現隨機打亂字串Python隨機字串
- 怎麼用Python生成隨機數Python隨機
- 小米新機跑分成績曝光?或將推出入門級智慧手機Pocophone F1 Lite
- 在oracle中將一行字串拆分成多行Oracle字串
- 將u盤從虛擬機器切回到主機的方法虛擬機
- 在 Python 中將列表轉換為字串需要哪些技術Python字串
- python3怎麼列印隨機數Python隨機
- Python隨機函式random使用詳解Python隨機函式random
- Python 列表(List)Python
- python列表(List)Python
- python的列表[]Python
- Python list(列表)Python
- Python-列表Python
- 現代化自定製 - 列表和庫部分
- Firefox 69 將加入隨機密碼生成器Firefox隨機密碼
- 層級查詢並將層級拆分成多列
- python–模組之random隨機數模組Pythonrandom隨機
- python怎麼生成隨機不重複陣列Python隨機陣列
- python_bomb—-列表Python
- Python列表切片操作Python
- Python列表基礎Python
- python列表擴充Python