2016-03-02 81 views
1

我運行在IPython的下面的代碼和上午在打印輸出和碼的IPython的細胞輸出驚訝:爲什麼ipython的輸出與set的__repr__或__str__不同?

print set(["A", "B", "C"]) 
print set(["A", "C", "B"]) 
print list(set(["A", "C", "B"])) 
print list(set(["A", "B", "C"])) 
print [k for k in set(["A", "C", "B"])] 
print [k for k in set(["A", "B", "C"])] 
a = set(["A", "B", "C"]) 
print a 
print a.__repr__() 
print a.__str__() 
print [(k, hash(k)) for k in a] 
a 

上述程序的輸出如下所示:

set(['A', 'C', 'B']) 
set(['A', 'C', 'B']) 
['A', 'C', 'B'] 
['A', 'C', 'B'] 
['A', 'C', 'B'] 
['A', 'C', 'B'] 
set(['A', 'C', 'B']) 
set(['A', 'C', 'B']) 
set(['A', 'C', 'B']) 
[('A', -269909568), ('C', -13908798), ('B', -141909181)] 
Out[34]: {'A', 'B', 'C'} 

請注意,電池輸出是{'A', 'B', 'C'}而打印輸出是set(['A', 'C', 'B'])

我的Python細節如下:

import sys 
print sys.version 
2.7.11 |Anaconda 2.3.0 (64-bit)| (default, Jan 29 2016, 14:26:21) [MSC v.1500 64 bit (AMD64)] 

回答

0

這是因爲set是一個無序的序列。當您定義set時,它不是有序的。當您嘗試打印時,它需要提供某種方式來訂購它,但它與給出set的元素的順序無關。此外,當您嘗試從set創建list時,它需要提出一些命令。它提出的順序總是相同的,但它與元素的順序完全無關。

2

IPython中使用不同的打印功能:

In [1]: from IPython.lib.pretty import pprint 

In [2]: a = set(["A", "B", "C"]) 

In [3]: pprint(a) 
{'A', 'B', 'C'} 

In [4]: a 
Out[4]: {'A', 'B', 'C'} 
相關問題