2013-03-10 13 views
15

Próbuję wydrukować zawartość zestawu, a kiedy to zrobię, otrzymam identyfikator zestawu na wydruku. . Na przykład, jest to moje wyjście set(['a', 'c', 'b', 'e', 'd', 'f', 'gg', 'ff', 'jk']) "na poniższym kodzie Chcę, aby pozbyć się tego słowa set Mój kod jest bardzo prosty i jest poniżejUsuwanie identyfikatora zestawu przy drukowaniu zestawów w języku Python

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

Oto znowu moje wyjście dla łatwego odniesienia.. set(['a', 'c', 'b', 'e', 'd', 'f', 'gg', 'ff', 'jk'])

Odpowiedz

34

można przekonwertować zestaw do listy, tylko na drukowaniu:

print list(words) 

lub można użyć str.join() dołączyć zawartość zestawu z przecinkiem:

print ', '.join(words) 
3

Instrukcja wykorzystuje implementację set implementacji . Możesz:

  1. Rozwiń własną funkcję drukowania, zamiast korzystać z print. Prostym sposobem, aby uzyskać ładniejszy formatowania może być użycie realizację list „s __str__() zamiast:

    print list(my_set)

  2. Zastąp wdrożenie w swoim własnym set podklasy __str__().

1

Można to zrobić, jeśli chcesz nawiasy klamrowe:

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

Albo, Format Zastosowanie:

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

przypadku drukowania zestaw liczb w Pythonie 3, można alternatywnie użyj cięcia.

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

nie tłumaczyć dobrze przy przenoszeniu z powrotem do 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' 

Z drugiej strony, join() wartości całkowite trzeba przekonwertować ciąg pierwszy:

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' 

Jest to jednak bardziej poprawne niż cięcie.

1

Podklasa ta nie działa dla liczb i znaków:

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

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

wyjść

set([1, 2, 3]) 
1, 2, 3 
Powiązane problemy