Python代码生成列表内容错误,返回长度4而非预期长度2
问题根因
代码中对列表使用+=操作时,会自动遍历等号右侧的可迭代对象,将其中的元素逐个追加到列表中,而不是把右侧对象整体作为单个元素存入。random.choice(cards_list_func)每次返回的是choice_list里长度为2的元组(比如(8, 'Eight')),用+=追加时,元组本身是可迭代对象,会被拆成两个独立元素存入列表。循环执行2次后,最终就会得到长度为4的扁平列表,和预期结果不符。
修复方案
把循环里的+=操作替换为列表的append()方法即可,append()会把传入的参数整体作为单个元素追加到列表末尾,不会拆解元组结构。
修复后的完整代码:
import random choice_list =[(2, 'Two'), (8, 'Eight'), (3, 'Three'), (7, 'Seven')] def dealer(cards_list_func): initial_cards = [] for item in range(2): initial_cards.append(random.choice(cards_list_func)) return initial_cards new_list = dealer(choice_list)
运行上述代码,返回的new_list就是长度为2、元素为元组的列表,符合预期,示例输出为[(8, 'Eight'), (7, 'Seven')]。
补充:如果一定要用
+=写法,可以把每次随机选中的元组包裹在一个单元素列表里,写成initial_cards += [random.choice(cards_list_func)],但这种写法可读性不如append(),日常开发更推荐用append()实现单元素追加。
内容的提问来源于stack exchange,提问作者Will108
相关产品推荐
相关产品推荐

