파이썬 리스트 컴프레이션 사용할때 반복문 없이 사용이 가능한가요?


예로 a = [] 라는 리스트가 있는데 반복문이나 조건문을 사용해 값을 넣는다고 할떄 빈값이 있을수도 있는 경우 아래식처럼 만는걸 리스트 컴프레이션으로 만들 수있는지 궁금합니다.

if not a:
    pass
else:
    a.append(value)

이걸

print(sum[if not a  pass else a.append(value)])

이렇런식으로 값이 없으면 넘어가고 있으면 뭔가를 하라고 만들고 싶은데 구글을 검색해봐도 전부 for문이 들어가 있는데 for문과 if문을 꼭 같이 써야하는건지 궁금합니다.


조회수 61


Hashcode banner summercoding

3 답변


리스트 컴프리헨션은 아니지만 이럴때는 함수형 프로그래밍 기법인 filter 가 유용할것같아요.

이렇게 쓰시면 되요. 리스트 a에서 1만 뽑아낸다고 할때

a = [1, 2, 3, 2, 5, 1, 7, 1]
b = list(filter(lambda x: x == 1, a))
print(b)

이런 코드를 쓰시면 됩니다.

  • 2018년 04월 11일에 작성됨
    코딩 좀 하는 중딩입니다. 저를 프로그래머로 채용하실 생각이 있으시면 꼭 연락주세요.


만일 더하기를 한다면...

numbers = [1, 2, 3, 4, 5, 5, 5 , 7, 8, 9, 10]
summation = sum([number for number in numbers if number == 5])
print (summation)

만약 특정 숫자를 선택해서 새로운 리스트에 저장하려면


get_num = [number for number in numbers if number ==5]
print(get_num)
  • 2018년 04월 15일에 작성됨
    교육자. 프로그래밍 비전공자. 취미로 파이썬 공부


예. 가능합니다.

리스트컴프리헨션은 간략히,

[값.메소드 for 값 in 집합 if 조건]

개념이므로, 말씀하신 예문

if not A:
    pass
else:
    a.append(value)

를 리스트내포로 직역(?)하면

[value for value in a if not A] #약간 어색하지만..

입니다.

간단한 예제를 몇 개 보여드리겠습니다.

# 예1) a 리스트 중 3의 배수나 5의 배수인 정수의 합을 출력하고 싶다
a = [1,2,3,4,5,6,7,8,9,10]
print(sum([i for i in a if i % 3 == 0 or i % 5 == 0]))
# 결과 : 33

# 예2) 문자열 리스트 중 길이가 4 이상인 문자열만 골라 대문자로, 나머지는 소문자로
리스트 = ['One','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten']
print([값.upper() if len(값) > 3 else 값.lower() for 값 in 리스트 ])
# 결과 : ['one', 'two', 'THREE', 'FOUR', 'FIVE', 'six', 'SEVEN', 'EIGHT', 'NINE', 'ten']


#예3) 메소드가 아니어도 됩니다.
print(["짝수" if 값 % 2 == 0 else "홀수" for 값 in a])
#결과 : ['홀수 ', '짝수', '홀수 ', '짝수', '홀수 ', '짝수', '홀수 ', '짝수', '홀수 ', '짝수']

질문을 조금만 더 구체적으로 해주시면 좋겠습니다ㅎ

구구절절 말이 길어졌네요;

  • 2018년 04월 14일에 작성됨
    보통 회사원입니다. 파이썬과 장고를 좋아합니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close