回答編集履歴

5

テキスト追加

2021/12/18 05:34

投稿

退会済みユーザー
test CHANGED
@@ -191,3 +191,53 @@
191
191
 
192
192
 
193
193
  ???? [replit.com/@kilesa/tera:Q374380 #3](https://replit.com/@kilesa/tera-Q374380-3?v=1)
194
+
195
+
196
+
197
+
198
+
199
+ ### 追記3
200
+
201
+ 一つ目のコード案について、冗長な部分がありました。以下修正点です。
202
+
203
+ ```diff
204
+
205
+ for span in lis:
206
+
207
+ lis2.extend([
208
+
209
+ - *(x for x in range(start, span[0])),
210
+
211
+ + *range(start, span[0]),
212
+
213
+ - [y for y in range(span[0], span[1] + 1)]
214
+
215
+ + [*range(span[0], span[1] + 1)]
216
+
217
+ ])
218
+
219
+ start = span[1] + 1
220
+
221
+ ```
222
+
223
+ ???? [replit.com/@kilesa/tera:Q374380 #4](https://replit.com/@kilesa/teraQ374380-4?v=1)
224
+
225
+
226
+
227
+ ### 追記4
228
+
229
+
230
+
231
+ 読みやすさの点ではどうかと思いますが追記3のコードを reduce を使って一行に詰めてみたものです。
232
+
233
+ ```python3
234
+
235
+ from functools import reduce
236
+
237
+
238
+
239
+ lis2, _ = reduce(lambda a, s: ([*a[0], *range(a[1], s[0]), [*range(s[0], s[1]+1)]], s[1]+1), lis, ([], 0))
240
+
241
+ ```
242
+
243
+ ???? [replit.com/@kilesa/tera:Q374380 #5](https://replit.com/@kilesa/teraQ3743805?v=1)

4

テキスト追加

2021/12/18 05:34

投稿

退会済みユーザー
test CHANGED
@@ -111,3 +111,83 @@
111
111
 
112
112
 
113
113
  ???? [replit.com/@kilesa/tera:Q374380 #2](https://replit.com/@kilesa/tera-Q374380-2?v=1)
114
+
115
+
116
+
117
+
118
+
119
+ ### 追記2
120
+
121
+
122
+
123
+ もう一案です。
124
+
125
+ 空リストの`lis2`に0以上22以下の整数を追加していきますが、その数が `lis`の要素の閉区間に含まれていれば入れ子のリストに追加し、含まれていなければ `lis2` に追加されるように `if`, `elif`および `else` を組み立てています。
126
+
127
+ ```python3
128
+
129
+ lis = [
130
+
131
+ [5,6],
132
+
133
+ [9,11],
134
+
135
+ [15,16],
136
+
137
+ [19,22]
138
+
139
+ ]
140
+
141
+
142
+
143
+ lis2 = []
144
+
145
+ i = 0
146
+
147
+
148
+
149
+ for x in range(lis[-1][1]+1):
150
+
151
+ if i < len(lis) and x == lis[i][0]:
152
+
153
+ lis2.append([x])
154
+
155
+ elif len(lis2) > 0 and type(lis2[-1]) == list:
156
+
157
+ if x <= lis[i][1]:
158
+
159
+ lis2[-1].append(x)
160
+
161
+ else:
162
+
163
+ lis2.append(x)
164
+
165
+ i += 1
166
+
167
+ else:
168
+
169
+ lis2.append(x)
170
+
171
+
172
+
173
+
174
+
175
+ print(lis2)
176
+
177
+
178
+
179
+
180
+
181
+ ```
182
+
183
+ **出力結果:**
184
+
185
+ > [0, 1, 2, 3, 4, [5, 6], 7, 8, [9, 10, 11], 12, 13, 14, [15, 16], 17, 18, [19, 20, 21, 22]]
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+ ???? [replit.com/@kilesa/tera:Q374380 #3](https://replit.com/@kilesa/tera-Q374380-3?v=1)

3

テキスト追加

2021/12/18 02:38

投稿

退会済みユーザー
test CHANGED
@@ -60,7 +60,7 @@
60
60
 
61
61
 
62
62
 
63
- もうひとつ出来ました。
63
+ もうひとつ出来ました。こちらははじめに0から22までを含む一次元のリストとして`lis2`を作っておいて、`lis` の含む長さ2のリストが表す区間を子リストで置き換えていきます。
64
64
 
65
65
 
66
66
 

2

回答追加

2021/12/17 19:15

投稿

退会済みユーザー
test CHANGED
@@ -50,4 +50,64 @@
50
50
 
51
51
 
52
52
 
53
- ???? [replit.com/@kilesa/tera-Q374380](https://replit.com/@kilesa/tera-Q374380?v=1)
53
+ ???? [replit.com/@kilesa/tera:Q374380](https://replit.com/@kilesa/tera-Q374380?v=1)
54
+
55
+
56
+
57
+
58
+
59
+ ### 追記
60
+
61
+
62
+
63
+ もうひとつ出来ました。
64
+
65
+
66
+
67
+ ```python3
68
+
69
+ lis = [
70
+
71
+ [5,6],
72
+
73
+ [9,11],
74
+
75
+ [15,16],
76
+
77
+ [19,22]
78
+
79
+ ]
80
+
81
+
82
+
83
+ lis2 = [x for x in range(lis[-1][1] + 1)]
84
+
85
+
86
+
87
+ d = 0
88
+
89
+ for s, e in lis:
90
+
91
+ start = s - d
92
+
93
+ end = e + 1 - d
94
+
95
+ lis2[start:end] = [lis2[start:end]]
96
+
97
+ d += (e - s)
98
+
99
+
100
+
101
+ print(lis2)
102
+
103
+
104
+
105
+ ```
106
+
107
+ **出力結果:**
108
+
109
+ > [0, 1, 2, 3, 4, [5, 6], 7, 8, [9, 10, 11], 12, 13, 14, [15, 16], 17, 18, [19, 20, 21, 22]]
110
+
111
+
112
+
113
+ ???? [replit.com/@kilesa/tera:Q374380 #2](https://replit.com/@kilesa/tera-Q374380-2?v=1)

1

コード修正

2021/12/17 18:43

投稿

退会済みユーザー
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  start = 0
24
24
 
25
- for i, span in enumerate(lis):
25
+ for span in lis:
26
26
 
27
27
  lis2.extend([
28
28
 
@@ -38,7 +38,9 @@
38
38
 
39
39
 
40
40
 
41
- print(lis2)
41
+ print(lis2)
42
+
43
+
42
44
 
43
45
  ```
44
46
 
@@ -48,4 +50,4 @@
48
50
 
49
51
 
50
52
 
51
- ???? [replit.com/@kilesa/tera-374380](https://replit.com/@kilesa/tera-374380?v=1)
53
+ ???? [replit.com/@kilesa/tera-Q374380](https://replit.com/@kilesa/tera-Q374380?v=1)