92917


下記のような要素の値分だけ要素があるリストXがあり、これから要素の値を１つずつにしたリストYを作成するにはどのような記述方法がありますでしょうか。

[code]

    # 元のリスト
    X=[4,4,4,4,3,3,3,6,6,6,6,6,6,2,2,1,3,3,3]
    
    # 変換後のリスト
    Y=[4,3,6,2,1,3]
    
[/code]

2日間考え、調べましたがわかりませんでした。  
リスト内包表記などを使うのかなと思っています。

わかる方いましたらご教授願います。  
よろしくお願い致します。


CC BY-SA 4.0
2022-12-20T08:24:31.517
92915
2022-12-20T09:27:05.460
2022-12-20T08:56:04.957
3060
56114
question
python python3
Pythonで[1,2,2,3,3,3]のようなリストから[1,2,3]のようなリストを作成するには、どのように記述すれば実現できるのでしょうか。


プログラミングには、Set(集合: 重複なし)とOrderedSet(順序保持集合)というものがあり、  
質問の要件を満たすOrderedSetをPythonで行うには、以下のようにできるようです。

<https://www.educative.io/answers/what-is-orderedset-in-python>

[code]

    from sortedcollections import OrderedSet
    
    x = [4,4,4,4,3,3,3,6,6,6,6,6,6,2,2,1,3,3,3]
    
    y = OrderedSet(x)
    
    print(y)
    
[/code]

順序保持が不要であれば以下のようにできるはずです。

[code]

    x = [4,4,4,4,3,3,3,6,6,6,6,6,6,2,2,1,3,3,3]
    
    y = set(x)
    
    print(y)
    
[/code]


CC BY-SA 4.0
2022-12-20T08:41:10.860
92916
2022-12-20T08:47:09.190
2022-12-20T08:47:09.190
40856
40856
92915
answer


最初に現れた`3,3,3`と後に現れた`3,3,3`を別物として扱いたい場合は、こちらの記事の`itertools.groupby()`とリスト内包表記が使えるでしょう。  
[Pythonでリストの連続する同じ値の要素をグループ化（itertools.groupby）](https://note.nkmk.me/python-
itertools-groupby/)

[code]

    import itertools
    
    X = [4,4,4,4,3,3,3,6,6,6,6,6,6,2,2,1,3,3,3]
    Y = [k for k, g in itertools.groupby(X)]
    print(Y)
    
[/code]


CC BY-SA 4.0
2022-12-20T08:47:39.560
92917
2022-12-20T08:47:39.560
26370
92915
answer


[more_itertools](https://more-itertools.readthedocs.io/en/stable/index.html) の
[unique_justseen](https://more-
itertools.readthedocs.io/en/stable/api.html#more_itertools.unique_justseen)
を使う方法もあります。

[code]

    from more_itertools import unique_justseen
    
    X = [4,4,4,4,3,3,3,6,6,6,6,6,6,2,2,1,3,3,3]
    Y = [*unique_justseen(X)]
    
    print(Y)
    
    # [4, 3, 6, 2, 1, 3]
    
[/code]


CC BY-SA 4.0
2022-12-20T09:27:05.460
92918
2022-12-20T09:27:05.460
47127
92915
answer