Как заменить конкретную строку в списке в python

#python #python-3.x

#python #python-3.x

Вопрос:

Я записал код для генерации [‘—‘, ‘—‘, ‘—‘] ниже:

 ans = []
for i in range(top, bottom):
    ans.append("-"*3)
  

Если я хотел бы изменить first ‘-‘ в первой строке и last ‘-‘ в последней строке на ‘*’, как выполнить приведенный ниже код? 🙂

желаемый результат был бы:

 ['*--', '---', '--*']
  

добавив строки под кодом.

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

1. что right и left

2. @aws_apprentice Извините, я отредактировал код.

3. пожалуйста, отредактируйте свой ответ с ожидаемым результатом

Ответ №1:

Если вы хотите добавить только первый и последний символы каждой строки, вам нужно использовать цикл в цикле:

 ans = []
for i in range(top, bottom):
    line = []
    for j in range(right-left):
        char = '-'
        if (i == 0 and j == 0) or (i == bottom - 1 and j == (right-left) -1):
            char = '*'
        line  = char
    ans.append(line)
  

Ответ №2:

Если вам нужно заменить только первую и последнюю строки в списке, это означает, что вы должны ограничить свой цикл, чтобы избежать этих конечных условий и обрабатывать их по-другому:

 ans = []

ans.append('*'   '-'*(3-1))
for _ in range(top 1, bottom-1):
    ans.append("-"*(3))
ans.append('-'*(3-1)   '*')

print(ans)
# ['*--', '---', '--*']
  

Ответ №3:

Поскольку вы хотите, чтобы отличались только начальный и конечный регистры, я думаю, проще всего просто обработать эти особые случаи с помощью if-оператора.

Пример:

 start = 0
end = 3

ans = []
for i in range(start, end):
    if i == start:
        ans.append("*"   "-" * 2)
    elif i == end-1:
        ans.append("-" * 2   "*")
    else:
        ans.append("-" * 3)

print(ans)
  

Не забудьте вычесть 1 из end при выполнении проверки, поскольку range() является эксклюзивным (второй аргумент range не включен в возвращаемый список).

Результат:

 ['*--', '---', '--*']
  

Альтернативой вложенным операторам if-else-if, которые я лично нахожу более удобочитаемыми, является:

 start = 0
end = 3

ans = []
for i in range(start, end):
    if i == start:
        ans.append("*"   "-" * 2)
        continue
    if i == end-1:
        ans.append("-" * 2   "*")
        continue

    ans.append("-" * 3)

print(ans)