Назначить динамическую c значение по умолчанию для переменной функции? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть функция, которая создает составную строку на основе того, сколько раз пользователь хочет ввести строку:

def string_maker(string_list, repeat_list):
  final_string = ''
  for i in range(len(string_list)):
    for _ in range(repeat_list[i]):
      final_string += string_list[i]
  return final_string

Так, например, string_maker(['a', 'b', 'c'], [1, 2, 1]) выводит abbc.

Я хочу сделать так, чтобы, если пользователь не ввел список для аргумента repeat_list, по умолчанию использовались все 1. Вот как я пытаюсь это сделать:

def string_maker(string_list, repeat_list = None):
  if repeat_list == None:
    repeat_list = [1] * len(string_list)
  final_string = ''
  for i in range(len(string_list)):
    for _ in repeat_list[i]:
      final_string += str
  return final_string

print(string_maker(['a', 'b', 'c']))

Однако я получаю сообщение об ошибке «1012 *», хотя новый фрагмент, который я включил, возвращает соответствующий список [1, 1, 1]. Есть ли лучший способ go сделать это?

1 Ответ

2 голосов
/ 26 марта 2020

Метод join является гораздо более эффективным способом построения этого списка.

from itertools import repeat


def string_maker(string_list, repeat_list=repeat(1)):
    return ''.join([x*n for x, n in zip(string_list, repeat_list)])

repeat(1) обеспечивает бесконечный поток, равный 1 с; zip использует только столько их, сколько необходимо для сопряжения с элементами string_list. x*n создает строку, состоящую из n повторных вхождений x.

>>> string_maker(list("abc"))
'abc'
>>> string_maker(list("abc"), [1,2,1])
'abbc'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...