Removing all whitespaces

Tags:

Python 코딩중 golfing.

>>> s = """a b\\tcd 
... e
... """
>>> ''.join(s.split()) # 난 이 문법이 정말 싫다.
'abcde'
>>> str.join('', s.split()) # 이게 더 낫다
'abcde'

split과 join이 whitespace를 제거한다는 것은 비직관적. regular expression을 쓴다고 하더라도 import re 하는 순간 golfing과는 멀어진다.

Ruby라면 이렇게 할 수 있다.

irb(main):001:0> s = "a b\t
irb(main):002:0" c
irb(main):003:0" "
=> "a b\t\nc\n"
irb(main):012:0> s.gsub(/\s/, '') # 공백을 제거하거나
=> "abc"
irb(main):003:0> s.scan(/\w+/).join # 공백이 아닌 문자를 합한다
=> "abc"

언어에 정규식이 더 잘 녹아들어가고 1 liner가 멋지게 가능한 언어가 바로 루비인 듯. 이런점에서는 Perl의 전통을 잘 계승한 듯 싶다.

Comments

One response to “Removing all whitespaces”

  1. Sam Kong Avatar
    Sam Kong

    정규식을 사용하지 않고 파이썬과 동일한 방식으로 한다고 하더라도 루비의 신택스가 더 이해하기 쉬운 것 같습니다.

    “a b\t\nc\n”.split.join

    파이썬에서 가장 surprising한 것 중의 하나가 ”.join(list) 인 것 같아요.
    join의 주체는 list이므로 list의 메소드여야 할 것 같은데, string의 메소드라니…

    “a b\t\nc\n”.gsub(/\s+/, ”) 처럼 하면 아주 약간의 속도 개선이 있지 않을까 하는 추측을 해봅니다.^^

    현대식 언어라면 정규식은 반드시 literal이 있어야 할 것 같아요.
    이런 점에서 파이썬이 이것을 지원하지 않는 점이 의아합니다.
    반면에 자바스크립트처럼 minimal spec 인 언어가 정규식 literal을 지원하는 점도 놀랍구요.

Leave a Reply

Your email address will not be published. Required fields are marked *