Python 从子列表中随机选择以填充空子列表

Python 从子列表中随机选择以填充空子列表,python,list,Python,List,我有两张名单 A=['A'],[],['l'],[] B=[['m','n'],['p'],[],['q','r','s']] 我需要的输出是 c=['a']、['p']、['l']、['s']] 每当a中有一个空的子列表时,我想从B中相应的子列表中附加一个随机选择 我的方法不起作用 随机导入 c=[x+随机。如果len(x)==0且len(y)>=1,则在zip(A,B)中为x,y抽取样本(y,1) 您可以使用来决定要在列表中存储的元素: from random import choice

我有两张名单

A=['A'],[],['l'],[]
B=[['m','n'],['p'],[],['q','r','s']]
我需要的输出是

c=['a']、['p']、['l']、['s']]
每当a中有一个空的子列表时,我想从B中相应的子列表中附加一个随机选择

我的方法不起作用

随机导入
c=[x+随机。如果len(x)==0且len(y)>=1,则在zip(A,B)中为x,y抽取样本(y,1)
您可以使用来决定要在列表中存储的元素:

from random import choice

[a if a else [choice(b)] for a, b in zip(A, B)]

您需要像这样使用
if

随机导入
A=['A'],[],['l'],[]
B=[['m','n'],['p'],[],['q','r','s']]
C=[
a_sub_list如果a_sub_list else[随机选择(b_sub_list)]对于a_sub_list,b_sub_list在zip中(a,b)
]
印刷品(C)
>>>[a'],[p'],[l'],[q']

您可以使用
操作符使用
随机返回到
B
中的随机选择。选择

from random import choices
[a or choices(b) for a, b in zip(A, B)]

您的代码只检查
len(x)==0
。如果
len(x)!=0
?@DeepSpace使子列表(我的类别)多样化。我需要每个子列表中的一个且仅一个元素。那么,如果len(x)!=0什么也不做。这就是您的错误所在。你不想“什么都不做”。如果
len(x)!=0
您想从
A
中获取原始列表,因为所有答案都在进行是的,您是对的。我知道我做错了…谢谢@deepspace,但不完全是输出操作wants@DeepSpace为什么差不多?将答案的输出与
[[a']、[p']、[l']、[s']
进行比较。尝试
[choice(b)]
出于某种原因,我有点喜欢“a或[choice(b)]”而不是“a如果a其他[choice(b)],但我想这是主观的。我会选择
choice(b)
,这相当于
choices(k)
(因为它有默认值
k=1
),但可读性更强