it-swarm.com.ru

Python: как объединить записи в наборе в одну строку?

По сути, я пытаюсь объединить записи в наборе, чтобы вывести одну строку. Я пытаюсь использовать синтаксис, похожий на функцию соединения для списков. Вот моя попытка:

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'

Каков эквивалентный вызов для наборов? 

53
Spencer
', '.join(set_3)

join является строковым методом, а не методом set.

117
Jmjmh

У наборов нет метода join, но вы можете использовать вместо него str.join .

', '.join(set_3)

Метод str.join будет работать с любым повторяемым объектом, включая списки и наборы.

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

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

join вызывается в строке:

print ", ".join(set_3)
5
MByD

Наборы не имеют порядка - так что вы можете потерять свой заказ при преобразовании списка в набор, т.е.

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

Обычно порядок сохраняется, но для больших наборов он почти наверняка не будет.

Наконец, просто если люди задаются вопросом, вам не нужно «,» в соединении. 

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

:)

4
John

Ни у set, ни у list нет такого метода join, у строки есть:

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

Кстати, вы не должны использовать имя list для ваших переменных. Дайте ему list_, my_list или другое имя, потому что list очень часто используется как функция python.

4
Ski

Я думаю, что у вас это просто задом наперед.

print ", ".join(set_3)
3
recursive

У вас есть оператор соединения в обратном направлении попробуйте:

print ', '.join(set_3)
3
Hunter

Я написал метод, который обрабатывает следующие Edge-случаи:

  • Установите размер один. ", ".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))
0
Fernando Irarrázaval G