Python 2.7 Python:用于随机创建字母表的超出范围列表

Python 2.7 Python:用于随机创建字母表的超出范围列表,python-2.7,Python 2.7,我想创建一个随机字母表。因此,我的代码如下: alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] def new_alphabet(): for i in range(0, 26): j = 25 my_new_alphabet = [

我想创建一个随机字母表。因此,我的代码如下:

alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

def new_alphabet():
    for i in range(0, 26):
        j = 25
        my_new_alphabet = [None] * 26
        my_new_alphabet[i] = alphabet[random.randint(0, j)]
        alphabet.remove(my_new_alphabet[i])
        j = j-1
   return my_new_alphabet
print new_alphabet()
但当我尝试执行它时:

my_new_alphabet[i] = alphabet[random.randint(0, j)]
IndexError: list index out of range

这可能很简单,但我无法找到问题所在。提前感谢。

您的代码有一些问题

  • 您的
    字母表
    缺少字母
    “S”
    ,因此它只有25个元素,因此循环和随机索引的范围是一次性的,因此存在超出范围的错误
  • j=25
    my_new_alphabet=[None]*26
    应该在循环之前,否则在每次迭代中都会重置它们
此外,您可以完全删除
j
,只需使用实际
字母表的边界即可:

def new_alphabet():
    my_new_alphabet = []
    while alphabet:
        letter = alphabet[random.randint(0, len(alphabet) - 1)]:
        # or just use this: letter = random.choice(alphabet)
        alphabet.remove(letter)
        my_new_alphabet.append(letter)
    return my_new_alphabet
或者直接使用,这正是您想要的:

def new_alphabet():
    my_new_alphabet = list(alphabet) # copy
    random.shuffle(my_new_alphabet)
    return my_new_alphabet