リストで終わるが、削除やアイテムを追加することをPythonでループのためとあれば入れ子に複数を短縮する方法はありますか?

Gmony5100:

私は、リスト内のリストのリストから番号をとり、以下の機能を持っている(変なセットアップを、それは私の最後の操作の残りの部分のために必要である)の種類というリストの全てを通って、最も内側のリストから番号を削除します。私も追加し、いくつかの機能を持っていると私は、forループやif文のネストされた数と、この方法でそれらを書かれています。

list = [['John', ['1','2','3']], ['Bob', ['4','5','6','7']], ['Jim', ['8','9']]]
def removeNumber(Number):
    for x in list:
        for y in x[1]:
            if y == Number:
                x[1].remove(Number)
removeNumber('5')
print(list)

コードの作品の上のブロック、それは最も内側のリストから、指定された番号を削除しますが、私は、我々はすべてそれがもしそうであれば、多くのforループのネストされたとしてひどい見える賛成することができると思うのよう。私は、Pythonにかなり新しいですし、リストの内包と多くの練習を持っていませんでした。

この使用したリスト内包または別の方法を使用して、すべてのより良い方法があるかどうかを記述する方法がある場合、私は思ったんだけど。「フラットがネストされたよりも優れている」のマントラを当てはめる意味ベター。この上の任意の助けもいただければ幸いです

tdelaney:

あなたはそのコードのバグを持っています。で項目を削除すると、x[1]外側の原因となるforリスト内の項目をスキップします。あなたは元のリストを維持したい場合は、行います

def removeNumber(Number):
    for x in list:
        while Number in x[1]:
            x[1].remove(Number)

しかし、Pythonで、私たちは通常、ちょうど新しいリストを作成します

def removeNumber(Number):
    for x in list:
        x[1] = [n for n in x[1] if n != Number]

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=21503&siteId=1