Как вы удаляете элемент списка

#python #list

#python #Список

Вопрос:

Я пытаюсь создать небольшую программу, которая будет путать буквы алфавита (проще говоря)

Я пытался использовать такие вещи, как list.pop() или list.remove() , но они ничего не сделали

 import random


def rand_let():
    i = 26
    alphabet = str('')
    for a in range(1, 26):
        key = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
        print(len(key))
        print(key)
        letter = random.randint(1, i)
        print(key[letter])
        letters = key[letter]
        alphabet  = str(letters)
        key.remove(letter)
        i -= 1


rand_let()
 

Я хочу, чтобы он перепутал алфавит,
это так, но то, как он это делает, заставит буквы повторяться (я не хочу, чтобы это повторялось)

Комментарии:

1. Перетасуйте key массив, а затем выполните alphabet = "".join(key)

2. Я не думаю, что вы должны получать какие-либо повторы. Каждый раз, когда вы добавляете букву alphabet , вы удаляете ее из key , чтобы вы не могли снова выбрать эту букву.

3. Так и должно быть random.randint(0, len(key)-1) . В противном случае вы никогда не выберете A и можете получить доступ за пределы списка.

4. В библиотеке python уже есть функция для этого (random.shuffle ), но чтобы удалить элемент из списка по индексу, используйте встроенный del (клавиша del[буква])

Ответ №1:

shuffle Функция from random сэкономит вам много строк и сделает то, что вы ищете:

 import random

alphabet = ['A', 'B', 'C']
random.shuffle(alphabet)

print(alphabet)
#Ex: ['C', 'A', 'B']
 

Ответ №2:

Причина, по которой вы получаете дубликаты, заключается в том, что, хотя у вас есть код для удаления буквы из списка ключей, строка, которая объявляет список ключей, также находится в цикле. Попробуйте переместить строку

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

над циклом for. Или, как предложено в других ответах, используйте библиотеку, чтобы сделать это за вас.

Ответ №3:

 import random
import string
alphabet = [letter for letter in string.ascii_uppercase]
random.shuffle(alphabet)
print(alphabet)
 

Ответ №4:

Это просто перетасует список, а затем напечатает элементы списка один за другим для каждой итерации цикла for .

 import random 

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

random.shuffle(key)

def choice(x):

    for letter in key:

        print()

choice(key)