LoginSignup
23
6

More than 5 years have passed since last update.

一蘭の行列で待ちながらPythonicなコードを書く

Last updated at Posted at 2018-12-29

一蘭の行列に並んでいた折、ふと店の壁を見るとオーダー次第で1万2千もの味ができるという。本当か。Pythonicに検証してみた。

from functools import reduce

order1 = {'味の濃さ': ('うす味', '基本', 'こい味'), 
         'こってり度': ('なし', 'あっさり', '基本', 'こってり', '超こってり'), 
         'にんにく':  ('なし', '少々', '基本', '1/2片分', '1片分'),
         'ネギ': ('なし', '白ネギ', '青ネギ'),
         'チャーシュー': ('なし', 'あり'),
         '秘伝のたれ': ('なし', '1/2倍', '基本', '2倍', 'X倍'), 
         '麵のかたさ': ('超かた', 'かため', '基本', 'やわめ', '超やわ')}
print(order1)
{'味の濃さ': ('うす味', '基本', 'こい味'), 'こってり度': ('なし', 'あっさり', '基本', 'こってり', '超こってり'), 'にんにく': ('なし', '少々', '基本', '1/2片分', '1片分'), 'ネギ': ('なし', '白ネギ', '青ネギ'), 'チャーシュー': ('なし', 'あり'), '秘伝のたれ': ('なし', '1/2倍', '基本', '2倍', 'X倍'), '麵のかたさ': ('超かた', 'かため', '基本', 'やわめ', '超やわ')}

各変数のレベルの数を内包表記で取り出す

order1_num = {key: len(value) for key, value in order1.items()}
order1_num
{'味の濃さ': 3,
 'こってり度': 5,
 'にんにく': 5,
 'ネギ': 3,
 'チャーシュー': 2,
 '秘伝のたれ': 5,
 '麵のかたさ': 5}

高階関数を用いて、リスト内の全要素を掛け算する。高階関数の引数としてラムダ関数を渡している。

reduce(lambda x, y: x * y,  order1_num.values())
11250

11250を千の位で切り上げて1万2千としているらしい。一蘭の主張はだいたい本当だったようだ。もっとも、'こってり'と'超こってり'に大きな差があるとは思えず、1万2千のうち多くは似たような味だろうと思うが・・・。

23
6
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
6