回答編集履歴

12

集合の列挙順に関していただいたアドバイスをもとに記述を修正

2020/11/15 05:24

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -1,16 +1,18 @@
1
- Pythonの集合には「順序」という概念がありませんので、**集合をソートしたいという発想そのものが無い**と思います。
1
+ Pythonの集合には「順序」という概念がありませんので、**集合をソートしたいという発想そのものが無い**と思います。ですので、集合ならではのソートアルゴリズムを求めるのではなく、リストとしてのソートアルゴリズムを求めるべきと思います。
2
2
 
3
3
 
4
4
 
5
- 上記は、ソートとしての順序ですので、要素を列挙して順番に取り出せることとは別の意味です。
5
+ *上記の「順序」は、ソートとしての順序ですので、要素を列挙して順番に取り出せることとは別の意味です。
6
+
7
+ *集合の特性である「重複要素が無い」ことを生かした、リストソートのアルゴリズムがあるかもしれません。
6
8
 
7
9
 
8
10
 
9
- Pythonのsorted()はiterableを対象にしていますので、コードとしては実行可能です。た、集合の「同一要素が無いという特性を生かしてリストよりも効率的なソートアルゴリズムがあるか」とう問いであれば意味はあると思います。
11
+ Pythonのsorted()はiterableを対象にしていますので、コードとしては実行可能です。ただしこれは集合をソートしているのではなく、集合から列挙した要素の並び(リストと等価構造)をソートしています。
10
12
 
11
13
 
12
14
 
13
- ただし、質問者様が例示されている`nodes = [0,1,2,2,3,1,4]`は、setに入れた時点で、以下に示すように順序は無くなり集合の列挙順番での表示となります(最初のnodesの並びを変えてもsetに入れた時点で同じ結果になります)。よってらsorted()や他の独自ソートアルゴリズムにかけるに、列挙順(こ場合質問者様が期待するソート結果順)に取り出されます。そこからさらに別の順番でソートしたい、というありえますがそれもはや集合をソートするといではなく、集合から列挙された順の要素の並びをソートしたい、ということで、リストをソートすることと等価であると思います。
15
+ 実際、質問者様が例示されている`nodes = [0,1,2,2,3,1,4]`は、setに入れた時点で、以下に示すように順序は無くなり集合の列挙順番での表示となります(最初のnodesの並びを変えてもsetに入れた時点で同じ結果になります)。なお、これは質問者様が期待するソート結果順に並んでいると思いますので、列挙された結果をさsorted()や他の独自ソートアルゴリズムにかけることは不要なっています。たたしこの列挙順はPythonに保証されているわけではありませんset()することでソートされるとは考えないようにお願いします。また、他の順番でソートしたい、という要望も、列挙した後のリスト等価な構造に対しての操作であり、結果リスとして保持するとます。そ結果を再度集合に変換し時点で、序が無くなりますの、操作したことは無に帰します。
14
16
 
15
17
 
16
18
 

11

一部修正

2020/11/15 05:24

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -6,7 +6,11 @@
6
6
 
7
7
 
8
8
 
9
- Pythonのsorted()はiterableを対象にしていますので、コードとしては実行可能です。また、集合の「同一要素が無いという特性を生かしてリストよりも効率的なソートアルゴリズムがあるか」という問いであれば意味はあると思います。ただし、質問者様が例示されている`nodes = [0,1,2,2,3,1,4]`は、setに入れた時点で、以下に示すようにソート(とは言いませんが)された状態になっておりますので、さらにそこからソートしたい、というのは意味が無いでしょう。(最初のnodesの並びを変えてもsetに入れた時点で同じ結果になります)
9
+ Pythonのsorted()はiterableを対象にしていますので、コードとしては実行可能です。また、集合の「同一要素が無いという特性を生かしてリストよりも効率的なソートアルゴリズムがあるか」という問いであれば意味はあると思います。
10
+
11
+
12
+
13
+ ただし、質問者様が例示されている`nodes = [0,1,2,2,3,1,4]`は、setに入れた時点で、以下に示すように順序は無くなり集合の列挙順番での表示となります(最初のnodesの並びを変えてもsetに入れた時点で同じ結果になります)。よって、そこからsorted()や他の独自ソートアルゴリズムにかける際に、列挙順(この場合、質問者様が期待するソート結果順)に取り出されます。そこからさらに別の順番でソートしたい、ということはありえますが、それはもはや集合をソートするというのではなく、集合から列挙された順番での要素の並びをソートしたい、ということで、リストをソートすることと等価であると思います。
10
14
 
11
15
 
12
16
 

10

一部修正

2020/11/15 04:47

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -1,4 +1,8 @@
1
1
  Pythonの集合には「順序」という概念がありませんので、**集合をソートしたいという発想そのものが無い**と思います。
2
+
3
+
4
+
5
+ ※上記は、ソートとしての順序ですので、要素を列挙して順番に取り出せることとは別の意味です。
2
6
 
3
7
 
4
8
 

9

補足追記

2020/11/15 04:38

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- Pythonのsorted()はiterableを対象にしていますので、コードとしては実行可能です。また、集合の「同一要素が無いという特性を生かしてリストよりも効率的なソートアルゴリズムがあるか」という問いであれば意味はあると思います。ただし、質問者様が例示されている`nodes = [0,1,2,2,3,1,4]`は、setに入れた時点で、以下に示すようにソート(とは言いませんが)された状態になっておりますので、さらにそこからソートしたい、というのは意味が無いでしょう。
5
+ Pythonのsorted()はiterableを対象にしていますので、コードとしては実行可能です。また、集合の「同一要素が無いという特性を生かしてリストよりも効率的なソートアルゴリズムがあるか」という問いであれば意味はあると思います。ただし、質問者様が例示されている`nodes = [0,1,2,2,3,1,4]`は、setに入れた時点で、以下に示すようにソート(とは言いませんが)された状態になっておりますので、さらにそこからソートしたい、というのは意味が無いでしょう。(最初のnodesの並びを変えてもsetに入れた時点で同じ結果になります)
6
6
 
7
7
 
8
8
 

8

一部修正

2020/11/15 04:33

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- Pythonのsorted()はiterableを対象にしていますので、集合の「同一要素が無いという特性を生かしてリストよりも効率的なソートアルゴリズムがあるか」という問いであれば意味はあると思います。ただし、質問者様が例示されている`nodes = [0,1,2,2,3,1,4]`は、setに入れた時点で、以下に示すようにソート(とは言いませんが)された状態になっておりますので、さらにそこからソートしたい、というのは意味が無いでしょう。
5
+ Pythonのsorted()はiterableを対象にしていますので、コードとしては実行可能です。また、集合の「同一要素が無いという特性を生かしてリストよりも効率的なソートアルゴリズムがあるか」という問いであれば意味はあると思います。ただし、質問者様が例示されている`nodes = [0,1,2,2,3,1,4]`は、setに入れた時点で、以下に示すようにソート(とは言いませんが)された状態になっておりますので、さらにそこからソートしたい、というのは意味が無いでしょう。
6
6
 
7
7
 
8
8
 

7

一部修正

2020/11/15 04:31

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -2,7 +2,23 @@
2
2
 
3
3
 
4
4
 
5
- 上記確認するたサンプルコ
5
+ Pythonのsorted()はiterable対象にしていまので、集合の「同一要素が無いという特性を生かしてリストよりも効率的なソートアルゴリズムがあか」という問いであれば意味はあると思います。だし、質問者様が例示されている`nodes = [0,1,2,2,3,1,4]`は、setに入れた時点で、以下に示すようにソート(とは言いませんが)された状態になっておりますで、さらにそこからソトしたい、というのは意味が無いでしょう。
6
+
7
+
8
+
9
+ ```Python
10
+
11
+ nodes = [0,1,2,2,3,1,4]
12
+
13
+ print(set(nodes))
14
+
15
+ #{0, 1, 2, 3, 4}
16
+
17
+ ```
18
+
19
+
20
+
21
+ 集合とリストの違いを確認するためのサンプルコード
6
22
 
7
23
 
8
24
 

6

補足修正

2020/11/15 04:30

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -57,7 +57,3 @@
57
57
  random_set == sorted_set ? True
58
58
 
59
59
  ```
60
-
61
-
62
-
63
- なお、最後の方に記述した比較は、必ずしもこの比較で中身まで含めた比較ができるわけではありませんので、参考までとしてください。

5

補足追記

2020/11/15 04:12

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -30,6 +30,8 @@
30
30
 
31
31
  print('sorted_set =', sorted_set)
32
32
 
33
+ print('random_list == sorted_list ?', random_list == sorted_list)
34
+
33
35
  print('random_set == sorted_set ?', random_set == sorted_set)
34
36
 
35
37
  ```
@@ -50,6 +52,12 @@
50
52
 
51
53
  sorted_set = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
52
54
 
55
+ random_list == sorted_list ? False
56
+
53
57
  random_set == sorted_set ? True
54
58
 
55
59
  ```
60
+
61
+
62
+
63
+ なお、最後の方に記述した比較は、必ずしもこの比較で中身まで含めた比較ができるわけではありませんので、参考までとしてください。

4

一部修正

2020/11/15 04:03

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -53,7 +53,3 @@
53
53
  random_set == sorted_set ? True
54
54
 
55
55
  ```
56
-
57
-
58
-
59
- なお、setはイミュータブルなので比較演算子が機能します。listは必ずしも比較演算子で確認できません。

3

誤字の修正

2020/11/15 03:59

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -56,4 +56,4 @@
56
56
 
57
57
 
58
58
 
59
- なお、setはミュータブルなので比較演算子が機能します。listは必ずしも比較演算子で確認できません。
59
+ なお、setはミュータブルなので比較演算子が機能します。listは必ずしも比較演算子で確認できません。

2

誤字の修正

2020/11/15 03:57

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  print('sorted_set =', sorted_set)
32
32
 
33
- print('random_set == sorted_set ? ', random_set == sorted_set)
33
+ print('random_set == sorted_set ?', random_set == sorted_set)
34
34
 
35
35
  ```
36
36
 
@@ -50,7 +50,7 @@
50
50
 
51
51
  sorted_set = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
52
52
 
53
- random_set == sorted_set ? True
53
+ random_set == sorted_set ? True
54
54
 
55
55
  ```
56
56
 

1

誤字の修正

2020/11/15 03:47

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -1,4 +1,4 @@
1
- Pythonの集合には「順序」という概念がありませんので、**集合をソートしたいという発想そのものが無い**と思います。
1
+ Pythonの集合には「順序」という概念がありませんので、**集合をソートしたいという発想そのものが無い**と思います。
2
2
 
3
3
 
4
4