これは数値ソートプログラムに関するものです。私はjoin
行の構文を理解できません。この番号を修正する方法pythonコードをソートして正しく動作するようにする
#!/usr/bin/env python
import sys
ar=[]
for arg in sys.argv:
ar.append(arg)
ar.sort()
print " ".join('%s'%x for x in ar)
これは数値ソートプログラムに関するものです。私はjoin
行の構文を理解できません。この番号を修正する方法pythonコードをソートして正しく動作するようにする
#!/usr/bin/env python
import sys
ar=[]
for arg in sys.argv:
ar.append(arg)
ar.sort()
print " ".join('%s'%x for x in ar)
私はjoin
のラインがスーパーファンキーに見えることに同意します。
" ".join(...)
は引数のリスト(または反復可能)をとり、すべての引数引数が1つのスペースで区切られた1つの文字列を作成します。
この場合、あなたのソートリストar
を渡すだけです。
#!/usr/bin/env python
import sys
ar=[]
for arg in sys.argv:
ar.append(arg)
ar.sort()
print " ".join(ar)
今、私たちは2つの問題を抱えて:
sys.argv
の代わりにsys.argv[1:]
を使用します。[1, 11, 13, 2, 3, 4, 5, 56, 9]
のような種類につながります。この問題を解決するには、ar.append(int(arg))
を使用します。'%s' % x for x in ar
は、generator expressionと呼ばれています。 '%s' % x
の束を生成し、x
が各項目としてar
に定義されています。 " ".join(...)
は、.join()
に与えられた各項目の間にスペースを入れます。ジェネレータが与えられると、ジェネレータが生成する各アイテムの間にスペースを入れます。 ar
が文字列のリストでない場合、ジェネレータは各項目を文字列に変換します。次に、" ".join(...)
を使用して、それぞれの文字列の間にスペースを入れます。 sys.argv
は常に文字列のリストなので、そのジェネレータ式は必要ありません。代わりに" ".join(sys.argv)
を使用することもできます。 this answerによれば、とにかくlist comprehensionを使用する方が効率的です。また、読むのが簡単だから"%s"%x
の代わりにstr(x)
を使用することもできます。
もちろん、すべての 'x 'は' str'なので、 'str'変換とジェネレータ式をスキップして、' ar'を直接使うこともできます。 – ShadowRanger
@ShadowRanger:おっと!私は逃しました。私は今編集しました。 – zondo
'ar.append(int(arg))'を使うと '。"(join) 'はうまく動作しません。 'ar'を' str'として残し、 'ar.sort(key = int)'としてソートすることで、元の 'str'を保持しながら' int'値をソートすることで永続的な変換を避けることができます。 – ShadowRanger