Python函数内调用列表生成函数时报Cannot choose from empty sequence错误
问题根因
fill_list函数首行的random_list=[]会生成一个新的局部空列表,覆盖了传入的参数引用,后续所有添加元素的操作都是在这个局部列表上执行,外部传入的原列表始终为空,没有被修改。win_condition中调用fill_list(the_list)时没有接收函数返回的填充完成的列表,仍在用原空列表调用random.choice,因此触发空序列选择错误。- 原代码缺少
import random语句,也会导致运行报错。
修复方案
推荐采用直接接收返回值的写法,逻辑更清晰:
import string import random def fill_list(): random_list = [] # 生成10个数字 for i in range(10): n = random.randint(1,10) random_list.append(n) # 生成5个字母 for j in range(5): n = random.choice(string.ascii_letters) random_list.append(n) return random_list def win_condition(): # 直接接收填充好的列表 the_list = fill_list() win_list = [] for i in range(4): n = random.choice(the_list) win_list.append(n) return win_list
如果需要保留传参修改原列表的逻辑,可修改为如下写法:
import string import random def fill_list(random_list): # 删除局部列表初始化语句,直接操作传入的列表 for i in range(10): n = random.randint(1,10) random_list.append(n) for j in range(5): n = random.choice(string.ascii_letters) random_list.append(n) def win_condition(): the_list = [] fill_list(the_list) win_list = [] for i in range(4): n = random.choice(the_list) win_list.append(n) return win_list
内容的提问来源于stack exchange,提问作者Jos
相关产品推荐
相关产品推荐

