2013-03-10 74 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