回答編集履歴

5

追記

2021/11/24 08:34

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -69,3 +69,7 @@
69
69
  )
70
70
 
71
71
  ```
72
+
73
+
74
+
75
+ これならrangeが何個でも、負のstepであろうと対応できますし、領域も圧迫しません。

4

追記

2021/11/24 08:34

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -35,3 +35,37 @@
35
35
  z = sorted({*x} & {*y})
36
36
 
37
37
  ```
38
+
39
+
40
+
41
+ 種明かしを受けて
42
+
43
+ ---
44
+
45
+ > 全体的には、私自身もsetを利用する方法を想定していましたが、とはいえsetにするとメモリを不必要に使ってしまう部分もあるので、その辺のコメントがあったりすると嬉しいなと思っていました。
46
+
47
+
48
+
49
+ こんなのはどうでしょう。
50
+
51
+ ```Python
52
+
53
+ rs = [x, y,]
54
+
55
+ z = (
56
+
57
+ i
58
+
59
+ for i in range(
60
+
61
+ min(e for r in rs for e in (r.start, r.stop)),
62
+
63
+ max(e for r in rs for e in (r.start, r.stop))
64
+
65
+ )
66
+
67
+ if all(i in r for r in rs)
68
+
69
+ )
70
+
71
+ ```

3

再送信

2021/11/24 08:26

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
 
30
30
 
31
- ある単に
31
+ zがリストで良なら、単に
32
32
 
33
33
  ```Python
34
34
 

2

追記

2021/11/23 12:18

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -9,3 +9,29 @@
9
9
  yのお尻とxの頭が重なる場合とか、
10
10
 
11
11
  三つ以上のrangeを扱う場合は集合の方が良いでしょうね。
12
+
13
+
14
+
15
+ 別解
16
+
17
+ ---
18
+
19
+ 多少慣れてないと読みづらいかもですが、集合を利用するならこんな感じが簡潔で好みです。
20
+
21
+ ```Python
22
+
23
+ start, *_, stop = sorted({*x} & {*y})
24
+
25
+ z = range(start, stop)
26
+
27
+ ```
28
+
29
+
30
+
31
+ あるいは単に
32
+
33
+ ```Python
34
+
35
+ z = sorted({*x} & {*y})
36
+
37
+ ```

1

追記

2021/11/23 12:16

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -3,3 +3,9 @@
3
3
  z = range(y.start, x.stop)
4
4
 
5
5
  ```
6
+
7
+
8
+
9
+ yのお尻とxの頭が重なる場合とか、
10
+
11
+ 三つ以上のrangeを扱う場合は集合の方が良いでしょうね。