Удаление идентификатора набора при печати наборов в Python - программирование
Подтвердить что ты не робот

Удаление идентификатора набора при печати наборов в Python

Я пытаюсь распечатать содержимое набора, и когда я это сделаю, я получаю заданный идентификатор в выходном файле. Например, это мой вывод set(['a', 'c', 'b', 'e', 'd', 'f', 'gg', 'ff', 'jk']) "для кода ниже. Я хочу избавиться от слова set. Мой код очень прост и ниже.

infile = open("P3TestData.txt", "r")
words = set(infile.read().split())
print words

Вот мой вывод снова для удобства: set(['a', 'c', 'b', 'e', 'd', 'f', 'gg', 'ff', 'jk'])

4b9b3361

Ответ 1

Вы можете преобразовать набор в список, только для печати:

print list(words)

или вы можете использовать str.join() для присоединения к содержимому набора с запятой:

print ', '.join(words)

Ответ 2

Оператор print использует set реализацию __str__(). Вы можете:

  • Внесите свою собственную функцию печати вместо использования print. Простым способом получения лучшего форматирования может быть использование list реализации __str__() вместо:

    print list(my_set)

  • Переопределите реализацию __str__() в вашем собственном подклассе set.

Ответ 3

Вы можете сделать это, если хотите фигурные скобки:

>>> s={1,2,3}
>>> s
set([1, 2, 3])
>>> print list(s).__str__().replace('[','{').replace(']','}')
{1, 2, 3}

Или используйте формат:

>>> print '{{{}}}'.format(', '.join(str(e) for e in set([1,'2',3.0])))
{3.0, 1, 2}

Ответ 4

Если вы печатаете набор чисел в Python 3, вы также можете использовать срез.

Python 3.3.5
>>> s = {1, 2, 3, 4}
>>> s
{1, 2, 3, 4}
>>> str(s)[1:-1]
'1, 2, 3, 4'

Это не очень хорошо переводится при переносе на Python2...

Python 2.7.6
>>> s = {1, 2, 3, 4}
>>> str(s)[1:-1]
'et([1, 2, 3, 4]'
>>> str(s)[5:-2]
'1, 2, 3, 4'

С другой стороны, к join() целым значениям вы должны сначала преобразовать в строку:

Python 2.7.6
>>> strings = {'a', 'b', 'c'}
>>> ', '.join(strings)
'a, c, b'
>>> numbers = {1, 2, 3, 4}
>>> ', '.join(numbers)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
>>> ', '.join(str(number) for number in numbers)
'1, 2, 3, 4'

Это, тем не менее, более корректно, чем нарезка.

Ответ 5

Этот подкласс работает для чисел и символов:

class sset(set):
    def __str__(self):
        return ', '.join([str(i) for i in self])

print set([1,2,3])
print sset([1,2,3])

выходы

set([1, 2, 3])
1, 2, 3