質問するログイン新規登録

回答編集履歴

5

テキスト追加

2021/12/18 05:34

投稿

退会済みユーザー
answer CHANGED
@@ -94,4 +94,29 @@
94
94
 
95
95
 
96
96
 
97
- ???? [replit.com/@kilesa/tera:Q374380 #3](https://replit.com/@kilesa/tera-Q374380-3?v=1)
97
+ ???? [replit.com/@kilesa/tera:Q374380 #3](https://replit.com/@kilesa/tera-Q374380-3?v=1)
98
+
99
+
100
+ ### 追記3
101
+ 一つ目のコード案について、冗長な部分がありました。以下修正点です。
102
+ ```diff
103
+ for span in lis:
104
+ lis2.extend([
105
+ - *(x for x in range(start, span[0])),
106
+ + *range(start, span[0]),
107
+ - [y for y in range(span[0], span[1] + 1)]
108
+ + [*range(span[0], span[1] + 1)]
109
+ ])
110
+ start = span[1] + 1
111
+ ```
112
+ ???? [replit.com/@kilesa/tera:Q374380 #4](https://replit.com/@kilesa/teraQ374380-4?v=1)
113
+
114
+ ### 追記4
115
+
116
+ 読みやすさの点ではどうかと思いますが追記3のコードを reduce を使って一行に詰めてみたものです。
117
+ ```python3
118
+ from functools import reduce
119
+
120
+ lis2, _ = reduce(lambda a, s: ([*a[0], *range(a[1], s[0]), [*range(s[0], s[1]+1)]], s[1]+1), lis, ([], 0))
121
+ ```
122
+ ???? [replit.com/@kilesa/tera:Q374380 #5](https://replit.com/@kilesa/teraQ3743805?v=1)

4

テキスト追加

2021/12/18 05:34

投稿

退会済みユーザー
answer CHANGED
@@ -54,4 +54,44 @@
54
54
  **出力結果:**
55
55
  > [0, 1, 2, 3, 4, [5, 6], 7, 8, [9, 10, 11], 12, 13, 14, [15, 16], 17, 18, [19, 20, 21, 22]]
56
56
 
57
- ???? [replit.com/@kilesa/tera:Q374380 #2](https://replit.com/@kilesa/tera-Q374380-2?v=1)
57
+ ???? [replit.com/@kilesa/tera:Q374380 #2](https://replit.com/@kilesa/tera-Q374380-2?v=1)
58
+
59
+
60
+ ### 追記2
61
+
62
+ もう一案です。
63
+ 空リストの`lis2`に0以上22以下の整数を追加していきますが、その数が `lis`の要素の閉区間に含まれていれば入れ子のリストに追加し、含まれていなければ `lis2` に追加されるように `if`, `elif`および `else` を組み立てています。
64
+ ```python3
65
+ lis = [
66
+ [5,6],
67
+ [9,11],
68
+ [15,16],
69
+ [19,22]
70
+ ]
71
+
72
+ lis2 = []
73
+ i = 0
74
+
75
+ for x in range(lis[-1][1]+1):
76
+ if i < len(lis) and x == lis[i][0]:
77
+ lis2.append([x])
78
+ elif len(lis2) > 0 and type(lis2[-1]) == list:
79
+ if x <= lis[i][1]:
80
+ lis2[-1].append(x)
81
+ else:
82
+ lis2.append(x)
83
+ i += 1
84
+ else:
85
+ lis2.append(x)
86
+
87
+
88
+ print(lis2)
89
+
90
+
91
+ ```
92
+ **出力結果:**
93
+ > [0, 1, 2, 3, 4, [5, 6], 7, 8, [9, 10, 11], 12, 13, 14, [15, 16], 17, 18, [19, 20, 21, 22]]
94
+
95
+
96
+
97
+ ???? [replit.com/@kilesa/tera:Q374380 #3](https://replit.com/@kilesa/tera-Q374380-3?v=1)

3

テキスト追加

2021/12/18 02:38

投稿

退会済みユーザー
answer CHANGED
@@ -29,7 +29,7 @@
29
29
 
30
30
  ### 追記
31
31
 
32
- もうひとつ出来ました。
32
+ もうひとつ出来ました。こちらははじめに0から22までを含む一次元のリストとして`lis2`を作っておいて、`lis` の含む長さ2のリストが表す区間を子リストで置き換えていきます。
33
33
 
34
34
  ```python3
35
35
  lis = [

2

回答追加

2021/12/17 19:15

投稿

退会済みユーザー
answer CHANGED
@@ -24,4 +24,34 @@
24
24
  **出力結果:**
25
25
  > [0, 1, 2, 3, 4, [5, 6], 7, 8, [9, 10, 11], 12, 13, 14, [15, 16], 17, 18, [19, 20, 21, 22]]
26
26
 
27
- ???? [replit.com/@kilesa/tera-Q374380](https://replit.com/@kilesa/tera-Q374380?v=1)
27
+ ???? [replit.com/@kilesa/tera:Q374380](https://replit.com/@kilesa/tera-Q374380?v=1)
28
+
29
+
30
+ ### 追記
31
+
32
+ もうひとつ出来ました。
33
+
34
+ ```python3
35
+ lis = [
36
+ [5,6],
37
+ [9,11],
38
+ [15,16],
39
+ [19,22]
40
+ ]
41
+
42
+ lis2 = [x for x in range(lis[-1][1] + 1)]
43
+
44
+ d = 0
45
+ for s, e in lis:
46
+ start = s - d
47
+ end = e + 1 - d
48
+ lis2[start:end] = [lis2[start:end]]
49
+ d += (e - s)
50
+
51
+ print(lis2)
52
+
53
+ ```
54
+ **出力結果:**
55
+ > [0, 1, 2, 3, 4, [5, 6], 7, 8, [9, 10, 11], 12, 13, 14, [15, 16], 17, 18, [19, 20, 21, 22]]
56
+
57
+ ???? [replit.com/@kilesa/tera:Q374380 #2](https://replit.com/@kilesa/tera-Q374380-2?v=1)

1

コード修正

2021/12/17 18:43

投稿

退会済みユーザー
answer CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  lis2 = []
12
12
  start = 0
13
- for i, span in enumerate(lis):
13
+ for span in lis:
14
14
  lis2.extend([
15
15
  *(x for x in range(start, span[0])),
16
16
  [y for y in range(span[0], span[1] + 1)]
@@ -18,9 +18,10 @@
18
18
  start = span[1] + 1
19
19
 
20
20
 
21
- print(lis2)
21
+ print(lis2)
22
+
22
23
  ```
23
24
  **出力結果:**
24
25
  > [0, 1, 2, 3, 4, [5, 6], 7, 8, [9, 10, 11], 12, 13, 14, [15, 16], 17, 18, [19, 20, 21, 22]]
25
26
 
26
- ???? [replit.com/@kilesa/tera-374380](https://replit.com/@kilesa/tera-374380?v=1)
27
+ ???? [replit.com/@kilesa/tera-Q374380](https://replit.com/@kilesa/tera-Q374380?v=1)