【Python備忘録】Perlのアレを、Pythonでどう書けばよいか #01
投稿日: / 更新日:
この記事は2年以上前に書かれたものです。情報が古い可能性があります。
お題: 数値と文字列が混在するリストの各要素を、カンマで連結して標準出力へ出力する。なお、行末は改行文字(\n)で終端する。
1. Perl 5
1 2 3 4 5 6 7 |
#!/usr/bin/env perl use strict; use warnings; my @list = (1, 2, 3, 'hello', 'world'); print join(q<,>, @list) . "\n"; |
2. Python 2.7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/usr/bin/env python2.7 list = [1, 2, 3, 'hello', 'world'] print ','.join(str(elem) for elem in list) # ポイント1: # join()はリストではなく文字列オブジェクトのメソッドのため、 # list.join(',') と書いても期待どおり動作しない。 # ポイント2: # join()はリスト内の文字列を連結するメソッドであり、 # リスト内に文字列以外の要素があるとTypeErrorとなる。 # Pythonは、Perlのような暗黙の型変換を行ってくれないため、 # 各要素を自前で文字列に変換する必要がある。 # ポイント3: # Pythonのprint文は、末尾に改行文字(\n)を付加する。 # 逆に、行末に改行を入れたくない場合は、printの代わりに # sys.stdout.write() メソッドを使用する。 |
3. (おまけ) Perl 6 (Rakudo 2016.07.1)
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/usr/bin/env perl6 my @list = (1, 2, 3, 'hello', 'world'); say join(q<,>, @list); # ポイント1: # strictとwarningsプラグマは、デフォルトで有効となっている。 # ただしwarningsについては、プラグマとして実装されていない模様。 # ポイント2: # sayの代わりにprintを使用する場合は、末尾に改行文字を付加する。 # なお、文字列の連結は"."(ピリオド)から"~"(チルダ)に変更されて # いるため、注意すること。 |