예제)특정 조합이 리스트 요소에 반드시 포함되어야 한다는 사실만 알 때의 조건식

작성자: [관리자] 하얀설표

2025.07.24 14:39 (KST) 작성됨

2025.08.20 10:45 (KST) 수정됨






(08.20) 수정됨.

str object가 다수 들어있는 list[str] object가 있다고 가정하자.

그리고 나는 현재 이 list의 각 요소가 정확히 무엇이어야 하는지는 모르지만, 각 index 요소마다 어떤 문자열이 포함되어야만 하는지에 대해서는 알고 있다.

이런 경우 어떻게 해야 할까?

 

코드

대충 다음과 같이 하면 된다.

data = [
 '가나다라',
 '1234',
 'abcd',
 '가갸거겨',
 '4321',
 'xyz',
]

check_list = []
for d in data:
 check = []
 check += [all([s in d for s in ['가나', '나다']])]
 check += [all([s in d for s in ['12', '34']])]
 check += [all([s in d for s in ['b', 'cd']])]
 check += [all([s in d for s in ['32', '1']])]
 print(f'{d=}')
 print(f'{check=}')
 check_list.append(check)

checks = [any(check) for check in zip(*check_list)]
print(f'{checks=}')
if checks and all(checks):
 print('조건을 만족함')
else:
 print('조건을 만족하지 않음')

 

출력문

위 코드 작동시 출력문은 다음과 같다.

>> d='가나다라'
check=[True, False, False, False]
d='1234'
check=[False, True, False, False]
d='abcd'
check=[False, False, True, False]
d='가갸거겨'
check=[False, False, False, False]
d='4321'
check=[False, False, False, True]
d='xyz'
check=[False, False, False, False]
checks=[True, True, True, True]
조건을 만족함

 

원리는 *check_list로 check_list의 요소들을 arg로 묶어서 zip 명령에 전달하고, 각 요소들을 새롭게 묶는 것이다.

이 방법을 통해 리스트의 동일 인덱스를 묶는 것이 가능하다.

표와 비교하자면 표의 가로세로 행을 서로 변경하는 것이다.

# 기존 check_list
[0 1 2 3 4]

[0 1 2 3 4]

[0 1 2 3 4]


# zip으로 병합시킨 checks

[0 0 0]

[1 1 1]

[2 2 2]

[3 3 3]

[4 4 4]

 

코드 줄이기

다음과 같이 코드를 줄이는 것도 가능하다.

data = [
 '가나다라',
 '1234',
 'abcd',
 '가갸거겨',
 '4321',
 'xyz',
]

string_list = [
 ['가나', '나다'],
 ['12', '34'],
 ['b', 'cd'],
 ['32', '1']
]

check_list = [[all([s in d for s in strings]) for strings in string_list] for d in data]

checks = [any(check) for check in zip(*check_list)]
if checks and all(checks):
 print('조건을 만족함')
else:
 print('조건을 만족하지 않음')

 

인덱스 지정하기

리스트의 몇 번 인덱스에 부합해야하는 조건을 특정할 수 있다면, 다음과 같이 인덱스값을 추가하여 검사하는 것도 가능하다.

data = [
 '가나다라',
 '1234',
 'abcd',
 '가갸거겨',
 '4321',
 'xyz',
 'zzz',
 '111',
]

string_dict = {
 0: ['가나', '나다'],
 1: ['12', '34'],
 2: ['b', 'cd'],
 3: ['32', '1']
}

check_list = [strings and all([s in data[index] for s in strings]) for index, strings in string_dict.items()]

if check_list and all(check_list):
 print('조건을 만족함')
else:
 print('조건을 만족하지 않음')

 

 






추천 (0)


글 목록

댓글을 달 수 없는 게시물입니다.


"분류없음" 카테고리의 #Python, #예제 관련 게시물