在 python 中随机给定块大小拆分列表
Split a list randomly given chunk sizes in python
我想编写一个函数,该函数 return 是随机拆分块的列表,给定每个块的大小列表。例如,假设我有一个从 0 到 9
的唯一整数列表
lst = list(range(10))
我想分成大小为 1、2、2 和 5 的 4 个块,因此该函数应采用如下输入变量 sizes
:
my_func(lst, sizes=[1, 2, 2, 5])
我希望函数 return 类似于
[[3], [1, 7], [2, 4], [0, 5, 6, 8, 9]]
如果输入 sizes = [5, 1, 4]
,我希望函数 return 像
这样的东西
[[1, 3, 4, 6, 8], [9], [0, 2, 5, 7]]
有什么建议吗?
我的做法是使用random.shuffle
然后遍历打乱后的数组!
import random
def my_func(lst, sizes):
random.shuffle(lst)
ret = []
pointer = 0
for s in sizes:
ret.append(lst[pointer:pointer+s])
pointer+=s
return ret
lst = list(range(10))
print(my_func(lst, sizes = [1, 2, 2, 5]))
print(my_func(lst, sizes = [5, 1, 4]))
[[5], [6, 7], [4, 0], [8, 3, 9, 2, 1]]
[[5, 2, 4, 3, 0], [8], [6, 7, 9, 1]]
使用 random.shuffle
随机排列您的列表。也只是继续切片列表。
import random
def random_split(lst, sizes):
if sum(sizes) != len(lst):
raise ValueError("Sizes should match list length!")
lst = lst.copy() # Copy list
random.shuffle(lst) # shuffle
res = []
for size in sizes:
split_list, lst = lst[:size], lst[size:] # Make two pieces of the list
# split_list.sort()
# Above line should be used if each sublist should be sorted
res.append(split_list)
return res
你可以这样做:
import random
lis=[]
g_lis=[]
for i in sizes:
list_int = i
for j in range(list_int):
num = random.randint(0,9)
lis.append(num)
g_lis.append(lis)
我想编写一个函数,该函数 return 是随机拆分块的列表,给定每个块的大小列表。例如,假设我有一个从 0 到 9
的唯一整数列表lst = list(range(10))
我想分成大小为 1、2、2 和 5 的 4 个块,因此该函数应采用如下输入变量 sizes
:
my_func(lst, sizes=[1, 2, 2, 5])
我希望函数 return 类似于
[[3], [1, 7], [2, 4], [0, 5, 6, 8, 9]]
如果输入 sizes = [5, 1, 4]
,我希望函数 return 像
[[1, 3, 4, 6, 8], [9], [0, 2, 5, 7]]
有什么建议吗?
我的做法是使用random.shuffle
然后遍历打乱后的数组!
import random
def my_func(lst, sizes):
random.shuffle(lst)
ret = []
pointer = 0
for s in sizes:
ret.append(lst[pointer:pointer+s])
pointer+=s
return ret
lst = list(range(10))
print(my_func(lst, sizes = [1, 2, 2, 5]))
print(my_func(lst, sizes = [5, 1, 4]))
[[5], [6, 7], [4, 0], [8, 3, 9, 2, 1]]
[[5, 2, 4, 3, 0], [8], [6, 7, 9, 1]]
使用 random.shuffle
随机排列您的列表。也只是继续切片列表。
import random
def random_split(lst, sizes):
if sum(sizes) != len(lst):
raise ValueError("Sizes should match list length!")
lst = lst.copy() # Copy list
random.shuffle(lst) # shuffle
res = []
for size in sizes:
split_list, lst = lst[:size], lst[size:] # Make two pieces of the list
# split_list.sort()
# Above line should be used if each sublist should be sorted
res.append(split_list)
return res
你可以这样做:
import random
lis=[]
g_lis=[]
for i in sizes:
list_int = i
for j in range(list_int):
num = random.randint(0,9)
lis.append(num)
g_lis.append(lis)