回答編集履歴

3

追記

2019/11/15 17:03

投稿

hayataka2049
hayataka2049

スコア30935

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  ##### 改良版2
46
46
 
47
- ~~「keyを取れないとかお前のコードスパムだな!」という**天の声**が聴こえてしまったので投げやりに~~改良したコード。
47
+ ~~「keyを取れないとかお前のコード無意味なスパムだな!」という**天の声**が聴こえてしまったので投げやりに~~改良したコード。
48
48
 
49
49
  ```python
50
50
 

2

追記

2019/11/15 17:03

投稿

hayataka2049
hayataka2049

スコア30935

test CHANGED
@@ -39,3 +39,33 @@
39
39
 
40
40
 
41
41
  ```
42
+
43
+
44
+
45
+ ##### 改良版2
46
+
47
+ ~~「keyを取れないとかお前のコードスパムだな!」という**天の声**が聴こえてしまったので投げやりに~~改良したコード。
48
+
49
+ ```python
50
+
51
+ from functools import cmp_to_key
52
+
53
+ my_max = lambda *args, key=lambda x:x, **kwargs: min(*args, key=(lambda key: cmp_to_key(lambda a, b: (lambda a_, b_:(a_ < b_) - (a_ > b_))(key(a), key(b))))(key), **kwargs)
54
+
55
+ lst = list(range(-10, 10, 3))
56
+
57
+ print(lst) # [-10, -7, -4, -1, 2, 5, 8]
58
+
59
+ print(my_max(lst)) # 8
60
+
61
+ lst = ["hoge", "fuga", "piyo"]
62
+
63
+ print(my_max(lst)) # piyo
64
+
65
+ lst = ['spam', 'ham', 'egg', 'foo', 'bar', 'foobar']
66
+
67
+ print(my_max(lst, key=len)) # foobar
68
+
69
+
70
+
71
+ ```

1

追記

2019/11/15 17:01

投稿

hayataka2049
hayataka2049

スコア30935

test CHANGED
@@ -13,3 +13,29 @@
13
13
 
14
14
 
15
15
  ```
16
+
17
+
18
+
19
+ ##### 改良版
20
+
21
+ 任意のデータ型でオリジナルの`max`と同様に動作するように改良しました。おそらくこれでいいはずです。
22
+
23
+ ```python
24
+
25
+ from functools import cmp_to_key
26
+
27
+ my_max = lambda *args, **kwargs: min(*args, key=cmp_to_key(lambda a, b: (a < b) - (a > b) ), **kwargs)
28
+
29
+ lst = list(range(-10, 10, 3))
30
+
31
+ print(lst) # [-10, -7, -4, -1, 2, 5, 8]
32
+
33
+ print(my_max(lst)) # 8
34
+
35
+ lst = ["hoge", "fuga", "piyo"]
36
+
37
+ print(my_max(lst)) # piyo
38
+
39
+
40
+
41
+ ```