如何从含子列表的列表中随机生成k个符合要求的列表?
实现从嵌套列表中随机生成指定数量的新列表
你的需求很清晰:给一个包含子列表的嵌套列表,生成k个新列表,每个新列表里的子列表位置都随机替换成该子列表中的一个元素,其他元素保持不变。用for循环完全可以实现,我来给你一步步拆解:
核心思路
- 借助Python的
random模块来实现随机选择子列表中的元素; - 循环k次,每次都遍历原列表的每个元素:
- 遇到普通元素直接保留;
- 遇到子列表时,用
random.choice()随机挑选一个元素替换它;
- 把每次生成的新列表存起来或者直接打印输出。
具体代码实现
import random # 原嵌套列表 original_list = [1,2,3,[11,22,33,44], 4,5,6, [22,33,44], 5, [99,88]] # 要生成的列表数量 k = 6 # 循环生成k个列表 for _ in range(k): new_list = [] for item in original_list: # 判断当前元素是否是子列表 if isinstance(item, list): # 随机选一个子列表元素加入新列表 new_list.append(random.choice(item)) else: # 普通元素直接加入 new_list.append(item) # 打印生成的列表(或者存入一个结果列表) print(new_list)
代码解释
isinstance(item, list):用来判断当前遍历的元素是不是子列表,这是处理嵌套结构的关键;random.choice(item):从子列表item中随机挑选一个元素,这个方法会自动处理非空列表的随机选择;- 外层的
for _ in range(k):控制生成k个不同的结果列表,_是占位符变量,因为我们不需要用到循环计数。
示例输出
运行代码后,你会得到类似这样的结果(因为是随机的,每次运行结果可能不同):
[1, 2, 3, 22, 4, 5, 6, 22, 5, 88]
[1, 2, 3, 33, 4, 5, 6, 44, 5, 88]
[1, 2, 3, 44, 4, 5, 6, 22, 5, 99]
[1, 2, 3, 22, 4, 5, 6, 33, 5, 99]
[1, 2, 3, 33, 4, 5, 6, 33, 5, 99]
[1, 2, 3, 33, 4, 5, 6, 44, 5, 88]
如果想把所有生成的列表保存起来,只需要在外层循环前定义一个result = [],然后在每次生成new_list后执行result.append(new_list)即可。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

