リストから日本語以外の要素を削除したい


様々なstr要素が含まれるリストから、日本語（ひらがな、カタカナ、漢字）以外の物を削除するコードを書いたのですが、何度も実行しないと全て消えてくれません。どうやら数字、アルファベットは一括で消すことが出来ても、記号を一つ消すたびにbreak(?)してしまうように見えるのですが・・・どうしたらいいのでしょうか。

[code]

    import re
    bag_of_things = ["あいうえお", "546", "たぬき", "饅頭", "abdf", "#%&", "aodih", "    ", "hello", "こんにちは"]
    nihongo = re.compile('[ぁ-んァ-ン一-龥]+')
    
    
    def clean(list):
        for item in list:
            if not nihongo.findall(item):
                print(item, "is not japanese")
                list.remove(item)
    
[/code]

[![結果\[1\]](https://i.stack.imgur.com/bMocf.png)

[![関数](https://i.stack.imgur.com/y8UhK.png)](https://i.stack.imgur.com/y8UhK.png)




for文の途中で、forで回しているlistの要素を削除しているため、対象オブジェクトがずれてしまっているのが原因です。

[code]

    >>> L = list(range(10))
    >>> L
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> for l in L:
    ...     print(l)
    ...     L.remove(l)
    ... 
    0
    2
    4
    6
    8
    >>> L
    [1, 3, 5, 7, 9]
    
[/code]

対処方法はいくつかあります。  
1\. すでに自己解決されているように、対象リストから`remove`するのではなく対象を抽出して別のリストにいれるか。  
2\. ループは対象リストのコピーに対して行うか。

[code]

    >>> L = list(range(10))
    >>> for l in L[:]:
    ...     print(l)
    ...     L.remove(l)
    ... 
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> L
    []
    
[/code]




for文の途中で、forで回しているlistの要素を削除しているため、対象オブジェクトがずれてしまっているのが原因です。

[code]

    >>> L = list(range(10))
    >>> L
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> for l in L:
    ...     print(l)
    ...     L.remove(l)
    ... 
    0
    2
    4
    6
    8
    >>> L
    [1, 3, 5, 7, 9]
    
[/code]

対処方法はいくつかあります。  
1\. すでに自己解決されているように、対象リストから`remove`するのではなく対象を抽出して別のリストにいれるか。  
2\. ループは対象リストのコピーに対して行うか。

[code]

    >>> L = list(range(10))
    >>> for l in L[:]:
    ...     print(l)
    ...     L.remove(l)
    ... 
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> L
    []
    
[/code]

