Python　リスト内を部分一致で検索する方法について


リスト内を部分一致で検索する方法について分からず困っております。  
以下リストで、例えば’.xlsx’が含まれるものだけを、新しリストに追加したい場合、  
コードをどのように記述すればいいのでしょうか？  
inはリスト内の検索では完全一致でしか適用しないような様子でした。  
よろしくお願いいたします。

↓これだけといけるのですが、

[code]

    list = ['aaa.xlsx','bbb.xlsx','ccc.csv']
    newlist = []
    kensaku = 'aaa.xlsx'
    if kensaku in list:
            newlist.append(kensaku)
    
[/code]

↓これだけいけません

[code]

    list = ['aaa.xlsx','bbb.xlsx','ccc.csv']
    newlist = []
    kensaku = '.xlsx'
    if kensaku in list:
            newlist.append(kensaku)
    
[/code]




こんな感じでどうでしょうか。

[code]

    l = ['aaa.xlsx', 'bbb.xlsx', 'ccc.csv']
    newl = []
    kensaku = '.xlsx'
    if any(s.endswith(kensaku) for s in l):
        newl.append(kensaku)
    
[/code]

`s.endswith(kensaku) for s in l`の部分は、`l`の要素を一つ一つ`kensaku`で終わっているか確認してブール値のリスト
(実際はジェネレータですが) を返します。上の例だと`[True, True, False]`を返します。  
`any`は、引数のリストの中の要素が一つでも`True`なら、`True`を返しますので、`any(s.endswith(kensaku) for s
in l)`は全体として、`l`の中の文字列がどれか一つでも`kensaku`で終わっていれば`True`を返します。

* * *

余談ですが`list`は、Pythonでデフォルトで定義されている型です。

[code]

    list = ['aaa.xlsx','bbb.xlsx','ccc.csv']
    
[/code]

とすると上書きしてしまい、型名として使えなくなってしまうので避けたほうがいいです。

