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

时间:2015-03-04 16:14:35

标签: 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 = [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

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

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

  • 您的alphabet缺少字母"S",因此它只有25个元素,因此您的循环和随机索引的范围是一次性的,因此超出范围错误
  • j = 25my_new_alphabet = [None] * 26应该在循环之前,否则您将在每次迭代中重置它们

此外,您可以完全删除j,只需使用实际alphabet列表的边界:

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

或者只使用random.shuffle,它完全符合您的要求:

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