2017-01-21 10 views
3

sympy.init_printing()を呼び出すと、表記法が{a, b, c}からset([a, b, c])に変更されます。なぜこれが起こるのですか?sympy.init_printingが表記法を変更するのはなぜですか?

In [1]: import sympy 

In [2]: (x, y, z) = sympy.symbols("x y z") 

In [3]: x+y**z 
Out[3]: x + y**z 

In [4]: (x+y**z).free_symbols 
Out[4]: {z, y, x} 

In [5]: sympy.init_printing() 

In [6]: x+y**z 
Out[6]: 
    z 
x + y 

In [7]: (x+y**z).free_symbols 
Out[7]: set([x, y, z]) 

In [8]: {1, 2, 3} 
Out[8]: set([1, 2, 3]) 

(図示のようにそれはまた、アイテムの順序を変更する)

+0

セットには本質的な順序はありません。それらは任意の順序で印刷できます。 – DyZ

+0

@DYZこれは注文に関するものではありません。 init_printing()が使われている場合、 '{1,2}'は 'set([1,2])'として表示されます。 (私たちのコメントを削除しましょう) –

答えて

2

これは、Python 2対3の問題です。 Python2では、set([...])のようにセットが出力されます。これは、{...}のリテラルがPython 2.7まで追加されなかったためです。 SymPyプリンタは3

SymPyバージョン1.0の後Pythonの前に行われた、SymPyはもはやPythonの2.6はサポートされていないので、これは常に文字列プリンタ用https://github.com/sympy/sympy/pull/11116で(でもPythonの2){...}を使用して印刷するSymPyマスターで修正されていますしかし、明らかに、私はかなりのプリンタがこれを同様に行うことを忘れていました。私はhttps://github.com/sympy/sympy/pull/12087に修正を入れました。

要するに、これらの変更(つまり、開発版のSymPyおよび今後のすべてのバージョン)の後、SymPyの印刷では{...}の表記を使用してセットが印刷されます。

関連する問題