0

単一のステートメントを使用して、原子記号と、原子記号に1文字しかないwts(私の辞書)の要素に対応する重みのみを含む辞書を印刷します。つまり、「H」を含めますが、「He」は省略します。私の辞書は次のように設定されています{'H':'1.00794','He':'4.002602','Li':'6.941','Be':'9.012182','B':'10.811','C':'12.0107','N':'14.0067','O':'15.9994'}

[for element in wts if len(element) == 1]

リスト内包表記でうまくいくと思っていたのですが、どうすれば要素記号だけを見てもらえるのでしょうか。これは次のエラーを返します:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_45.py", line 10, in <module>
    exec compile(u"print _support_.syseval(python, u'[for element in wts if len(element) == 1]', __SAGE_TMP_DIR__)" + '\n', '', 'single')
  File "", line 1, in <module>

  File "/sagenb/sage_install/sage-5.3-sage.math.washington.edu-x86_64-Linux/devel/sagenb-git/sagenb/misc/support.py", line 487, in syseval
    return system.eval(cmd, sage_globals, locals = sage_globals)
  File "/sagenb/sage_install/sage-5.3-sage.math.washington.edu-x86_64-Linux/local/lib/python2.7/site-packages/sage/misc/python.py", line 53, in eval
    eval(compile(s, '', 'exec'), globals, globals)
  File "", line 3
    [for element in wts if len(element) == 1]
       ^
SyntaxError: invalid syntax
4

3 に答える 3

6

構文エラーがあります(Pythonで指摘されています)。使用する:

[element for element in wts if len(element) == 1]

リスト内包表記は、の前の式で始まる必要がありforます。この構文を使用すると、たとえば大文字と小文字を区別するなど、さらに操作を適用できます。

[element.upper() for element in wts if len(element) == 1]

反復変数名を何度も繰り返さなければならないため、短い変数名で書かれた内包表記がよく見られます。私はそれを次のように書くかもしれませんx

[x for x in wts if len(x) == 1]
于 2012-11-12T20:51:06.930 に答える
0

list-compを使用できます。

>>> dts = {'H':'1.00794','He':'4.002602','Li':'6.941','Be':'9.012182','B':'10.811','C':'12.0107','N':'14.0067','O':'15.9994'}
>>> [(el, weight) for el, weight in dts.iteritems() if len(el) == 1]
[('C', '12.0107'), ('B', '10.811'), ('N', '14.0067'), ('H', '1.00794'), ('O', '15.9994')]

またはfilter

>>> filter(lambda (k, v): len(k) == 1, dts.iteritems())
[('C', '12.0107'), ('B', '10.811'), ('N', '14.0067'), ('H', '1.00794'), ('O', '15.9994')]
于 2012-11-12T21:02:59.050 に答える
0

「原子記号とそれに対応する重みのみを含む辞書を印刷する」ように求められているので、答えは次のように辞書の理解を使用する必要があると思います。

>>> print {el: wt for el, wt in wts.iteritems() if len(el) == 1}
{'H': '1.00794', 'C': '12.0107', 'B': '10.811', 'O': '15.9994', 'N': '14.0067'}
于 2012-11-12T21:55:46.737 に答える