如何用随机字母生成独立指定长度单词列表?Python代码迭代叠加问题求助
问题:生成独立随机单词时出现内容叠加
尝试生成由随机字母组成的单词列表,单词长度随机取1、4、7或2,但运行代码后生成的单词会叠加前一次的内容,得到类似['TUKD', 'TUKDLH', 'TUKDLHKN', 'TUKDLHKNU', 'TUKDLHKNUGUEI']的结果,期望每个单词完全独立不叠加。
原代码如下:
import random alphabet = [] for i in range(65,91): alphabet.append(chr(i)) letter_count = [1,4,7,2] empty_letter=[] empty_word = [] def generate_word(number): for i in range(0,number): empty_letter.append(random.choice(alphabet)) return("".join(empty_letter)) for i in range(5): empty_word.append(generate_word(random.choice(letter_count))) print(empty_word)
错误原因
empty_letter是全局定义的列表,每次调用generate_word函数时,都会往这个全局列表里追加字母,导致后续生成的单词会包含之前所有迭代的字母,最终出现叠加效果。
修复方案
将empty_letter移到generate_word函数内部,每次调用函数时创建一个新的空列表,这样每个单词的生成过程都是独立的,不会互相干扰。
修复后的代码:
import random alphabet = [] for i in range(65,91): alphabet.append(chr(i)) letter_count = [1,4,7,2] empty_word = [] def generate_word(number): empty_letter = [] # 移到函数内部,每次调用都新建列表 for i in range(number): empty_letter.append(random.choice(alphabet)) return("".join(empty_letter)) for i in range(5): empty_word.append(generate_word(random.choice(letter_count))) print(empty_word)
另外还可以简化代码,用列表推导式和生成器表达式让代码更简洁:
import random alphabet = [chr(i) for i in range(65, 91)] letter_count = [1,4,7,2] empty_word = [] def generate_word(number): return "".join(random.choice(alphabet) for _ in range(number)) for _ in range(5): empty_word.append(generate_word(random.choice(letter_count))) print(empty_word)
内容的提问来源于stack exchange,提问作者Will Vaught
相关产品推荐
相关产品推荐

