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隨機
- js隨機切換背景音樂JS隨機
- python生成隨機數、隨機字串Python隨機字串
- Python Tricks 若干Python
- python 隨機字串Python隨機字串
- Python隨機數與隨機字串詳解Python隨機字串
- JS 列表 - 隨筆JS
- 實現一個炫酷的隨機標籤排列效果(顏色隨機,大小隨機,成菱形排列的列表)隨機
- Python基礎_根據隨機數_按長度_升序或降序排序列表Python隨機排序
- Python中如何將列表資料清空?Python
- python 隨機數生成Python隨機
- 演算法隨筆——樹上問題若干演算法
- Python如何隨機生成1到100的隨機數?Python隨機
- python中如何隨機分配Python隨機
- 【轉】python生成隨機字串Python隨機字串
- python random隨機模組使用Pythonrandom隨機
- Python隨機森林 - CodeProjectPython隨機森林Project
- 用php如何快速將字串切分成陣列PHP字串陣列
- [NOIP2022] 比賽 隨機排列 部分分隨機
- Python生成隨機數random模組Python隨機random
- Python中如何生成隨機數?Python隨機
- python生成隨機數的方法Python隨機
- python 隨機生成字串資料Python隨機字串
- Python隨機數生成方法Python隨機
- 將手機號轉化為由隨機字母表示隨機
- 在oracle中將一行字串拆分成多行Oracle字串
- mapreduce將若干小檔案合成大檔案
- 小米新機跑分成績曝光?或將推出入門級智慧手機Pocophone F1 Lite
- 將u盤從虛擬機器切回到主機的方法虛擬機
- 怎麼用Python生成隨機數Python隨機
- Python 實現隨機打亂字串Python隨機字串
- python–模組之random隨機數模組Pythonrandom隨機
- python列表Python
- 隨機之美,隨機森林隨機森林
- 層級查詢並將層級拆分成多列
- Fedora 24 考慮將 systemd 分成兩個軟體包