Python: у меня правильный результат, но в неправильном формате. Тренируюсь со струнами. Есть идеи как это исправить? - PullRequest
0 голосов
/ 04 мая 2020

Код:

def group_list(group, users):
  members = str(users).split()
  return group + ":" + str(members)

print(group_list("Marketing", ["Mike", "Karen", "Jake", "Tasha"]))
print(group_list("Engineering", ["Kim", "Jay", "Tom"]))
print(group_list("Users", ""))

Фактический вывод:

Marketing:["['Mike',", "'Karen',", "'Jake',", "'Tasha']"]
Engineering:["['Kim',", "'Jay',", "'Tom']"]
Users:[]

Как вместо этого получить следующий желаемый результат?

Marketing: Mike, Karen, Jake, Tasha
Engineering: Kim, Jay, Tom
Users:

Ответы [ 3 ]

1 голос
/ 04 мая 2020

В написанной вами функции group_list users - это список, поэтому запуск str(users) преобразует стандартный формат списка (в скобках) в строку, которая затем разделяется пробелами с .split() ( который предназначен для разделения строки в список). Что вы хотите сделать, это использовать метод .join(), чтобы объединить все элементы в вашем списке ввода в одну строку

Попробуйте это:

    def group_list(group, users):
        # Join each element of users, separated by ', '
        output = group + ': ' + ', '.join(users)
        return output
1 голос
/ 04 мая 2020

вот то, что вы, вероятно, ищете:

def group_list(group, users):
  users_string = ", ".join(users)
  return "{}: {}".format(group, users_string)

print(group_list("Marketing", ["Mike", "Karen", "Jake", "Tasha"]))
print(group_list("Engineering", ["Kim", "Jay", "Tom"]))
print(group_list("Users", ""))

Вы можете легко объединять элементы массивов, используя join. Я предпочитаю строить строки, используя str.format, а не объединять их, используя оператор "+".

str.format: https://docs.python.org/3.4/library/string.html#formatstrings
str.join: https://docs.python.org/3.4/library/stdtypes.html#str .join

1 голос
/ 04 мая 2020

Вы, вероятно, хотите этого. Я дам краткое резюме того, что это делает.

def group_list(group, users):
  return group + ": " + ', '.join(users)

print(group_list("Marketing", ["Mike", "Karen", "Jake", "Tasha"])) 
print(group_list("Engineering", ["Kim", "Jay", "Tom"]))
print(group_list("Users", ""))

Отображение:

Marketing: Mike, Karen, Jake, Tasha
Engineering: Kim, Jay, Tom
Users: 

Объяснение:

', '.join(users)

Используется для объединения серии строк из списка users с разделителем в в этом случае запятая с последующим пробелом.

Почему ваш код не работает?

members = str(users).split()
    return group + ":" + str(members)

str(users) возвращает str представление list, что означает, что оно буквально возвращает строка, которая выглядит следующим образом (обратите внимание, что строка содержит буквенные кавычки, встроенные в строку, а также квадратные скобки:

"['Mike', 'Karen', 'Jake', 'Tasha']"

Когда вы вызываете .split() для этого результата, по умолчанию Поведение .split() состоит в разделении на пустое пространство и возвращении list. Это означает, что мы получаем что-то похожее на это:

["['Mike',",    "'Karen',",     "'Jake',",     "'Tasha']"]

Мы видим, что это list и окружено в квадратных скобках и что list содержит несколько коротких str объектов:

"['Mike',"
"'Karen',"
"'Jake',"
"'Tasha']"

Следующее, что происходит в вашем коде, это то, что мы пытаемся преобразовать элементы list в str с помощью str(members), чтобы получить строку repres представление членов list.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...