2013-03-10 71 views
15

我想打印出一個設置的內容,當我這樣做時,我在打印輸出中獲得設置標識符。例如,這是我的輸出set(['a', 'c', 'b', 'e', 'd', 'f', 'gg', 'ff', 'jk'])「爲下面的代碼我想擺脫這個詞set我的代碼非常簡單,下面在Python中打印設置時刪除設置標識符

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

這裏又是我的輸出,以供參考:。set(['a', 'c', 'b', 'e', 'd', 'f', 'gg', 'ff', 'jk'])

回答

34

你可以設定轉換到一個列表,只是打印:

print list(words) 

或者你可以使用str.join()用逗號加入集的內容:

print ', '.join(words) 
3

print聲明使用set__str__()的實現。您可以:

  1. 推出自己的打印功能,而不是使用print。一個簡單的方法來獲得一個更好的格式可能使用的__str__()list實現,而不是:

    print list(my_set)

  2. 覆蓋在自己的set子類__str__()實施。

1

如果你想要在大括號你可以這樣做:

>>> 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} 
1

如果在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' 

然而,這比切片更正確。

1

這個子類適用於數字和字符:

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