Python — Как реализовать zfill во вложенном списке

#python

#python

Вопрос:

Я уже публиковал этот код с другим вопросом, и, пытаясь его доработать, я наткнулся на ошибку. Я хочу упростить визуализацию моего вложенного списка, и проблема, с которой я столкнулся на этот раз, связана с zfill. При попытке изменить каждый элемент в моем вложенном списке на двухзначное число, чтобы немного подправить ситуацию, я допустил ошибку. Когда я запускаю следующий код, числа не состоят из 2 цифр каждое —

 import random

def random_2d_array(rows, columns):
    output = []
    iteration = 0
    while iteration != rows:
        i2 = 0
        iteration  = 1
        output.append([])
        while i2 != columns:
            i2  = 1
            num = random.randint(1, 10)
            col = output[iteration - 1]
            col.insert(i2 - 1, num)
    for i in output:
        for j in i:
            j = str(j)
            j = j.zfill(2)
    return 'n'.join([str(i) for i in output])

print(random_2d_array(10, 10))
  

Буду признателен за любую помощь.

Ответ №1:

Вы не используете j after j = j.zfill(2) . Вы должны присвоить элементу в списке это значение:

 import random

def random_2d_array(rows, columns):
    output = []
    iteration = 0
    while iteration != rows:
        i2 = 0
        iteration  = 1
        output.append([])
        while i2 != columns:
            i2  = 1
            num = random.randint(1, 10)
            col = output[iteration - 1]
            col.insert(i2 - 1, num)
    for i in output:
        for j in range(len(i)):
            s = str(i[j])
            i[j] = s.zfill(2)
    return 'n'.join([str(i) for i in output])

print(random_2d_array(10, 10))
  

Результат:

 ['01', '03', '08', '03', '06', '03', '06', '10', '10', '08']
['08', '08', '06', '04', '10', '03', '04', '06', '10', '06']
['07', '04', '03', '02', '02', '04', '10', '04', '07', '06']
['05', '10', '10', '04', '09', '09', '03', '10', '09', '09']
['08', '09', '09', '10', '06', '04', '08', '09', '05', '05']
['06', '02', '05', '01', '05', '07', '01', '06', '03', '08']
['06', '06', '04', '09', '06', '01', '02', '10', '08', '01']
['08', '10', '10', '05', '10', '10', '02', '06', '10', '09']
['08', '07', '04', '08', '03', '03', '02', '08', '03', '10']
['10', '07', '02', '07', '05', '05', '10', '04', '06', '08']
  

Редактировать: Если вы хотите убрать кавычки, используйте

 return 'n'.join([str(i) for i in output]).replace(''','')
  

в качестве последней строки вашей функции.

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

1. вы также можете заменить больше символов в этой строке, например, return 'n'.join([str(i) for i in output]).replace(''','').replace('[','').replace(']','').replace(',','') это выглядит еще чище