Python: як об’єднати записи в наборі в один рядок?


84

В основному, я намагаюся об’єднати записи в наборі, щоб вивести один рядок. Я намагаюся використовувати синтаксис, подібний до функції об'єднання для списків. Ось моя спроба:

list = ["gathi-109","itcg-0932","mx1-35316"]
set_1 = set(list)
set_2 = set(["mx1-35316"])
set_3 = set_1 - set_2
print set_3.join(", ")

Однак я отримую цю помилку: AttributeError: 'set' object has no attribute 'join'

Що таке еквівалентний виклик для наборів?

Відповіді:


165
', '.join(set_3)

Це joinрядовий метод, а не набір методів.


14
якщо ваш набір містить цілі числа / ', '.join(str(s) for s in set_3)
довжини, які

31

Набори не мають joinметоду, але ви можете використовувати його str.join.

', '.join(set_3)

str.joinМетод буде працювати на будь-який Iterable об'єкта , включаючи списки і безліч.

Примітка: будьте обережні з використанням цього набору, що містить цілі числа; вам потрібно буде перетворити цілі числа у рядки перед викликом приєднатися. Наприклад

set_4 = {1, 2}
', '.join(str(s) for s in set_4)


4

Ані метод the, setані такий не listмає join, рядок має:

','.join(set(['a','b','c']))

До речі, ви не повинні використовувати ім'я listдля своїх змінних. Дайте йому list_, my_listабо інша назва , тому що listдуже часто використовується функція пітона.


4

У наборів немає замовлення - тому ви можете втратити своє замовлення при перетворенні списку в набір, тобто:

>>> orderedVars = ['0', '1', '2', '3']
>>> setVars = set(orderedVars)
>>> print setVars
('4', '2', '3', '1')

Як правило, порядок залишатиметься, але для великих наборів майже напевно не буде.

Нарешті, просто на випадок, коли люди задаються питанням, вам не потрібно знака "," у приєднанні.

Просто: '' .join (встановити)

:)




0

Я написав метод, який обробляє такі випадки:

  • Встановіть розмір один. ", ".join({'abc'})Повернеться "a, b, c". Моїм бажаним результатом було "abc".
  • Набір, включаючи цілі числа.
  • Порожній набір повинен повернутися ""
def set_to_str(set_to_convert, separator=", "):
        set_size = len(set_to_convert)
        if not set_size:
            return ""
        elif set_size == 1:
            (element,) = set_to_convert
            return str(element)
        else:
            return separator.join(map(str, set_to_convert))

Могли використати, " ".join({'abc'})щоб отримати бажаний o / p "abc". виконуваний код у repl.it
Abhijeet

Цікаво. Щойно зрозумів, що set ('abc') та {'abc'} мають різну поведінку. Ось що мене відкинуло.
Fernando Irarrázaval G

Я оновив виконуваний код для роботи з набором і словником
Abhijeet

FYI, {'abc'} - це набір. І "".join(set(ip_data))дає рандомізований порядок букв (наприклад, 'bca'), оскільки набір створює три елементи {'a', 'b', 'c'}, але не зберігає порядок.
Фернандо Ірарразаваль, Г
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.