목록이 끝이 제거하거나 항목을 추가하는 것을 파이썬에서 루프와 경우 중첩 된 다중을 단축 할 수있는 방법이 있습니까?

Gmony5100 :

나는 목록에서 목록에서 목록에서 번호를 취 다음 함수가 (이상한 설정을하지만, 내 말에 나머지 작업에 필요한) 모든 목록을 통해 종류와 가장 안쪽 목록에서 번호를 제거하는 것이 . 나뿐만 아니라 추가 몇 가지 기능을하고 난 루프와 문 경우 몇 중첩으로이 방식으로 작성했습니다.

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)

코드 작품 위의 블록은 가장 안쪽의 목록에서 지정된 수를 제거하지만 나는 우리가 모든이 경우 많은 루프에 대한 중첩과와 끔찍 동의 할 수 있다고 생각처럼. 나는 파이썬 꽤 새로운 오전 지능형리스트와 많은 연습이 없었어요.

거기에이 사용 지능형리스트를 작성하는 방법 또는 더 좋은 방법이 전혀있을 경우 다른 방법을 사용하는 경우 궁금하네요. 더 나은 "평면이 중첩보다 낫다"의 진언을 맞는 의미한다. 이것에 어떤 도움이 많이 주시면 감사하겠습니다

tdelaney :

당신은 코드에서 버그를 가지고있다. 에서 항목을 제거 x[1]외부 원인은 for목록에있는 항목을 건너 뜁니다. 원래 목록을 유지하려면 수행

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

그러나 파이썬에서 우리는 일반적으로 단지 새로운 목록을 만들

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=21502&siteId=1