Добавление нескольких значений одновременно в 2d массив в python - PullRequest
0 голосов
/ 11 февраля 2020

Я новичок ie в python Я пытаюсь создать простую программу, которая присваивает каждой букве алфавита в двумерном массиве случайное число. Мне удалось это сделать, но это выглядит очень неэффективно. Я думаю, что oop может быть внедрен в код и уменьшить количество ненужного кода, но я не уверен, как это сделать. Любые идеи? или помочь?

from array import *
import random

list2 = []
for i in range(100):
    r = random.randint(0,26)
    if r not in list2: list2.append(r) 
T2 = [["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"],
     ["_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_",]]


T2[1][0] = list2[0]
T2[1][1] = list2[1]
T2[1][2] = list2[2]
T2[1][3] = list2[3]
T2[1][4] = list2[4]
T2[1][5] = list2[5]
T2[1][6] = list2[6]
T2[1][7] = list2[7]
T2[1][8] = list2[8]
T2[1][9] = list2[9]
T2[1][10] = list2[10]
T2[1][11] = list2[11]
T2[1][12] = list2[12]
T2[1][13] = list2[13]
T2[1][14] = list2[14]
T2[1][15] = list2[15]
T2[1][16] = list2[16]
T2[1][17] = list2[17]
T2[1][18] = list2[18]
T2[1][19] = list2[19]
T2[1][20] = list2[20]
T2[1][21] = list2[21]
T2[1][22] = list2[22]
T2[1][23] = list2[23]
T2[1][24] = list2[24]
T2[1][25] = list2[25]



for r in T2:
    for c in r:
        print(c,end = " ")
    print()

Ответы [ 3 ]

0 голосов
/ 11 февраля 2020

Вы можете просто использовать срез list2 при инициализации T2.

T2 = [["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"],
      list2[:26]]

И вы можете создать list2 без всего oop:

list2 = list(range(26))
random.shuffle(list2)

Ваш l oop даже не гарантирует создание списка по крайней мере с 26 элементами. Теоретически, random.randint() может возвращать одно и то же число каждый раз, поэтому все проверки, если номер уже есть в списке, завершатся неудачно после первой итерации.

0 голосов
/ 11 февраля 2020

Вы можете использовать модуль string, который содержит все буквы Engli sh и модуль random для перетасовки ваших данных. Например:

import string
from random import shuffle


letters = list(string.ascii_uppercase)
indexes = list(range(len(letters)))
shuffle(indexes)

array_2d = list(zip(indexes, letters))
print(array_2d)

>>>
[['11' 'A']
 ['24' 'B']
 ['9' 'C']
 ['5' 'D']
 ['23' 'E']
 ['0' 'F']
 ['17' 'G']
 ['8' 'H']
 ['25' 'I']
 ['18' 'J']
 ['21' 'K']
 ['16' 'L']
 ['19' 'M']
 ['4' 'N']
 ['6' 'O']
 ['15' 'P']
 ['3' 'Q']
 ['13' 'R']
 ['10' 'S']
 ['7' 'T']
 ['20' 'U']
 ['12' 'V']
 ['1' 'W']
 ['22' 'X']
 ['2' 'Y']
 ['14' 'Z']]

0 голосов
/ 11 февраля 2020

Вы можете получить алфавит из string.ascii_uppercase , а затем перемешать цифры 0-25, чтобы получить случайный порядок.

>>> import string
>>> import random
>>> res = [list(string.ascii_uppercase), sorted(range(len(string.ascii_uppercase)), key=lambda x:random.random())]
>>> res
[['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'], [3, 12, 7, 8, 9, 14, 11, 24, 6, 18, 17, 1, 5, 15, 16, 13, 2, 19, 20, 25, 0, 21, 23, 4, 10, 22]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...