ブックマーク / nishiohirokazu.hatenadiary.org (5)

  • Pythonの辞書にunicodeとstrで同一の文字列を入れたらどうなるか - 西尾泰和のはてなダイアリー

    In [1]: {u"a": 1, "a": 2} Out[1]: {u'a': 2} ほう、なるほど。これは In [2]: u"a" == "a" Out[2]: True なのでu"a"と"a"が同一視されているんだな。もちろん In [3]: u"a" is "a" Out[3]: False なのだけど、isで「同じキーか」のチェックをしたのでは In [4]: (1, 2) is (1, 2) Out[4]: False とタプルが区別されてしまって嬉しくない。言語を設計するうえで割と悩ましいところだよね。このバイト列とユニコード文字列の自動変換は色々なわかりにくいバグの原因になるのでPython3.0からは取り除かれた。 >>> b"a" == "a" False >>> {b"a": 1, "a": 2} {b'a': 1, 'a': 2}

    Pythonの辞書にunicodeとstrで同一の文字列を入れたらどうなるか - 西尾泰和のはてなダイアリー
  • 竹内郁雄先生のアイコ問題について - 西尾泰和のはてなダイアリー

    竹内郁雄先生の最終講義で話題に上がった「大勢でジャンケンするときに、アイコになりやすくでとても時間がかかる!なんかいい方法はないか?」という問題。 先生の講演の中では参加者n=3の時の方法が解説されていた。「3人のうちの2人がジャンケンをして、どちらかが勝ったならそれが勝者、アイコならジャンケンしなかった人が勝者」と。 厳密な「ジャンケンのルール」の定義がなされていないとか、何を最小化すべきかが明確に与えられていない、という意見が散見される。でも、そうじゃないんだよ。与えた問題に正しく答えたからといって出題者は何も楽しくない。そんなことより「面白い結論」が得られる問題設定を作ることの方が創造的で面白いんだ。妥当な問題設定でアイコの確率を0にできるなら、それはかなり面白い。 さて、ここからは僕が竹内先生の講演を聞いて勝手に解釈したアイコ問題について語る。 まず、僕は「n人の参加者の中から1人

    竹内郁雄先生のアイコ問題について - 西尾泰和のはてなダイアリー
    phirose
    phirose 2010/03/06
  • 続: パーフェクトシャッフルは何回で元に戻るか - 西尾泰和のはてなダイアリー

    半年前に作ったパーフェクトシャッフルは何回で元に戻るかの を円形にしたい。 できた。 30枚のカードに「半分に分けて互い違いに組み合わせる」というシャッフルを5回すると元の並びに戻る、という図。 abcdefって6枚のカードがあったら、まず半分に分けて abc, def それから交互に組み合わせて daebfc にする、というシャッフルね。 シャッフルのたびに、1枚目は2枚目になり、2枚目は4枚目になり、4枚目は8枚目になり、8枚目は16枚目になり、16枚目は半分に分けたときに後半の1枚目なので次のシャッフルで1枚目に戻ってくる。5回。 3枚目は6枚目になり、6枚目は12枚目になり、12枚目は24枚目になり、24枚目は後半の9枚目だから17枚目になり、17枚目は後半の2枚目だから3枚目に戻ってくる。やはり5回。 他のカードに関しても同様に成り立つんだけども説明は省略。 Q&A @atusi

    続: パーフェクトシャッフルは何回で元に戻るか - 西尾泰和のはてなダイアリー
    phirose
    phirose 2010/01/09
  • Pythonで2つの文字列がa == bだけどもnot(a is b)であるようなケース - 西尾泰和のはてなダイアリー

    文字列の比較で疑問から引用: d1 = 'a a' d2 = 'a a' id(d1) # => 27605856 id(d2) # => 27606080 えっなんで? 文字列は変更不可能なオブジェクトなので普通はisじゃなくて==で比較をするんだけどね。空白で区切られた同一内容の文字列を2つ、対話的環境で個別に作成してからisで比較するとFalseになるようだ。 Python 2.6.1 (r261:67515, Jan 25 2009, 00:21:48) [GCC 4.0.1 (Apple Inc. build 5490)] on darwin >>> a = "a a" >>> b = "a a" >>> a is b False しかし、一つの式で書くとTrue >>> "a a" is "a a" True 一つの関数にまとめてもTrue >>> def foo(): ...

    Pythonで2つの文字列がa == bだけどもnot(a is b)であるようなケース - 西尾泰和のはてなダイアリー
  • Pythonのlambda - 西尾泰和のはてなダイアリー

    プログラミングシンポジウムで言語パターン - 使いやすい言語・ライブラリをデザインする方法 - qwik.jp/lang-patternの発表を聞いていて、使ってほしくない機能は使いにくくするという話のところで「Pythonlambdaが使いやすく改善されないのはGuidoが使ってほしくないと思っているから」と発言したらソースを求められたので調べてみた The fate of reduce() in Python 3000 Why drop lambda? Most Python users are unfamiliar with Lisp or Scheme, so the name is confusing; also, there is a widespread misunderstanding that lambda can do things that a nested fun

    Pythonのlambda - 西尾泰和のはてなダイアリー
  • 1