파이썬에서 목록을 반복


177

하위 목록이있는 목록이 있습니다. 길이가 3 인 모든 하위 목록을 인쇄하고 싶습니다.

파이썬에서 다음을 수행하고 있습니다.

for x in values[:]:
    if len(x) == 3:
        print(x)

values원래 목록입니다. 위의 코드는 x?의 각 값에 대해 길이가 3 인 모든 하위 목록을 인쇄합니까 ? 하위 목록을 length == 3한 번만 표시하고 싶습니다 .

문제가 해결되었습니다. 문제는 Eclipse 편집기에 있습니다. 이유를 이해하지 못하지만 루프를 실행할 때 내 목록의 절반 만 표시됩니다.

Eclipse에서 변경해야 할 설정이 있습니까?


1
당신이 할 수 print values여기에 출력을 보여? 편집 : 또는 비어 있지 않은지 확인하십시오.
Brigand

답변:


196

이 시도,

x in mylist보다 더 많은 읽을 수 x in mylist[:]와는 len(x)같아야한다 3.

>>> mylist = [[1,2,3],[4,5,6,7],[8,9,10]]
>>> for x in mylist:
...      if len(x)==3:
...        print x
...
[1, 2, 3]
[8, 9, 10]

또는 더 많은 파이썬 사용 목록 이해 가 필요한 경우

>>> [x for x in mylist if len(x)==3]
[[1, 2, 3], [8, 9, 10]]
>>>

15

당신은 for x in values오히려 오히려 사용할 수 있습니다 for x in values[:]; 후자는 불필요한 사본을 만듭니다. 또한 코드는 3이 아닌 2의 길이를 검사합니다.

이 코드는 x- 값당 하나의 항목 만 인쇄 하며 하위 목록 인의 x요소를 반복 values합니다. 따라서 각 하위 목록을 한 번만 인쇄합니다.


4
values ​​[:]는 값의 모든 요소를 ​​잘라냅니다. 나는 당신이 슬라이싱에서 생성 된 임시 목록을 의미한다고 가정합니다. 그냥 확인하고 싶어
batbrat February

1
원치 않는 사본을 언급 해 주셔서 감사합니다. @ batbrat 그것은 얇아지지 않고 잘립니다. 내가 의미하는 것은 값이 복제되어 여전히 있음을 의미 values합니다.
AsTeR

설명해 주셔서 감사합니다.
batbrat

14

여기 내가 찾고있는 해결책이 있습니다. List1의 숫자 요소 차이가 포함 된 List2를 작성하려는 경우

list1 = [12, 15, 22, 54, 21, 68, 9, 73, 81, 34, 45]
list2 = []
for i in range(1, len(list1)):
  change = list1[i] - list1[i-1]
  list2.append(change)

while len(list1)은 11 (요소)이지만 len(list2)list1의 인덱스 0을 가진 요소에서 for1을 시작하지 않기 때문에 10 개의 요소 만 시작 한다는 점에 유의하십시오.


이것은 0이 아닌 인덱스 1에서 시작하는 데 필요한 것입니다. +1
timv

1

대신이 작업을 수행하십시오.

values = [[1,2,3],[4,5]]
for x in values:
    if len(x) == 3:
       print(x)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.