2016-04-06 5 views

答えて

0

私は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))を使用します。
+2

'ar.append(int(arg))'を使うと '。"(join) 'はうまく動作しません。 'ar'を' str'として残し、 'ar.sort(key = int)'としてソートすることで、元の 'str'を保持しながら' int'値をソートすることで永続的な変換を避けることができます。 – ShadowRanger

1

'%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)を使用することもできます。

+0

もちろん、すべての 'x 'は' str'なので、 'str'変換とジェネレータ式をスキップして、' ar'を直接使うこともできます。 – ShadowRanger

+0

@ShadowRanger:おっと!私は逃しました。私は今編集しました。 – zondo

関連する問題