

pythonを始めたての初心者です。

[code]

    list=['a','i','u','e','o']
    list[1:4]=['a']
    
[/code]

とした場合

[code]

    ['a','a','a','e','o']
    
[/code]

となると思ったのですが

[code]

    ['a','a','o']
    
[/code]

長さが短くなってしまいました。  
何が違うのかご教示いただけるとありがたいです。


CC BY-SA 4.0
2021-05-18T10:56:18.520
75928
2021-05-20T03:53:25.993
2021-05-18T11:23:17.203
43025
45373
question
python
python listについての質問


Pythonでの listは, 他の言語では dynamic-array などと呼ばれるものです  
動的にサイズが変動するので, 質問にある動作が普通の動作です  
参考:  
[データ構造:リスト型について](https://docs.python.org/ja/3/tutorial/datastructures.html)

長さを固定にする場合は, そのようなデータ構造を選んで使用することになります

[code]

    import numpy as np
    arr = np.array(['a','b','c','d','e'])
    arr[1:4] = 'a'
    
    # array(['a', 'a', 'a', 'a', 'e'], dtype='<U1')
    
[/code]

標準パッケージだと, (もしかすると) `array` で可能かもしれない

* * *

あと `list` や `dict` など, Pythonの基本データ型と同じ名前は使用しないほうがよいでしょう  
(使うならたとえば `lst` `dct` など, 違うものに)


CC BY-SA 4.0
2021-05-18T11:20:58.533
75930
2021-05-18T11:20:58.533
43025
75928
answer


スライスへの割り当てを行うとリストの長さは変わってしまいます。

<https://docs.python.org/ja/3.8/library/stdtypes.html#sequence-types-list-
tuple-range>  
リファレンスによると  
s[i:j] = t  
s の i から j 番目までのスライスをイテラブル t の内容に入れ替えます

"入れ替える"と記載されています。


CC BY-SA 4.0
2021-05-18T11:28:52.627
75931
2021-05-18T11:28:52.627
45381
75928
answer


ちなみに周りくどく書き換えるならこのように書いたらいいと思われます。

[code]

    lis = ['a', 'i', 'u', 'e', 'o']
    del lis[1:3]
    lis.insert(1, 'a')
    lis.insert(2, 'a')
    lis
    
[/code]


CC BY-SA 4.0
2021-05-20T03:53:25.993
75968
2021-05-20T03:53:25.993
45388
75928
answer