파이썬 리스트 컴프레이션 사용할때 반복문 없이 사용이 가능한가요?
조회수 1439회
예로
a = []
라는 리스트가 있는데
반복문이나 조건문을 사용해 값을 넣는다고 할떄 빈값이 있을수도 있는 경우 아래식처럼
만는걸 리스트 컴프레이션으로 만들 수있는지 궁금합니다.
if not a:
pass
else:
a.append(value)
이걸
print(sum[if not a pass else a.append(value)])
이렇런식으로 값이 없으면 넘어가고 있으면 뭔가를 하라고 만들고 싶은데 구글을 검색해봐도 전부 for문이 들어가 있는데 for문과 if문을 꼭 같이 써야하는건지 궁금합니다.
3 답변
-
리스트 컴프리헨션은 아니지만 이럴때는 함수형 프로그래밍 기법인
filter
가 유용할것같아요.이렇게 쓰시면 되요. 리스트 a에서 1만 뽑아낸다고 할때
a = [1, 2, 3, 2, 5, 1, 7, 1] b = list(filter(lambda x: x == 1, a)) print(b)
이런 코드를 쓰시면 됩니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
예. 가능합니다.
리스트컴프리헨션은 간략히,
[값.메소드 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]) #결과 : ['홀수 ', '짝수', '홀수 ', '짝수', '홀수 ', '짝수', '홀수 ', '짝수', '홀수 ', '짝수']
질문을 조금만 더 구체적으로 해주시면 좋겠습니다ㅎ
구구절절 말이 길어졌네요;
-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
만일 더하기를 한다면...
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)
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력