2012-06-28 12 views
124

문자열 배열이 있으면 for 루프를 수행하지 않고 문자열이 배열에 있는지 확인할 수 있습니까? 특히, 나는 if 문 내에서 그것을 할 수있는 방법을 찾고 있어요, 그래서 이런 식으로 뭔가 :항목이 배열/목록에 있는지 확인하십시오.

if [check that item is in array]: 
+1

나는 질문은 생각 이미 대답 [여기] (http://stackoverflow.com/questions/9542738/python-find-in-list) –

+0

또는 더 나은 여기에 : http://stackoverflow.com/questions/12934190/is-there-a-short -contains-function-for-lists – torina

+0

[목록에 값이 있는지 확인하는 가장 빠른 방법] (https://stackoverflow.com/questions/7571635/fastest-way-to-check-if-a-) 가치있는 존재 함) –

답변

242

당신이 "배열"말 "목록"을 의미 가정, 당신은

if item in my_list: 
    # whatever 
을 수행 할 수 있습니다
+45

... 그게 전부 야? 나는 지금 20 분 동안 인터넷 검색을 해왔다. ... – SomeKittens

+2

@SomeKittens : 목록은 내부적으로 멤버십 테스트를 위해 자체 루프를 수행 할 것이다. – jdi

+1

@jdi이고 그 루프는 Python에서 명시 적으로 코딩 된 것보다 훨씬 빠르다. –

15

"배열"이라고 말하면 "목록"을 의미한다고 가정합니다. 스벤 마나 흐의 해결책이 좋다. 목록에서 반복적으로 점검을 수행하려는 경우, 각 점검마다 더 빠를 수있는 세트 또는 frozenset으로 변환 할 가치가 있습니다. strs의 목록이 subjects라고 가정하면

subject_set = frozenset(subjects) 
if query in subject_set: 
    # whatever 
-1

당신은 또한 배열에 대해 동일한 구문을 사용할 수 있습니다. 예를 들어 팬더 시리즈에서 검색하는 경우 :

ser = pd.Series(['some', 'strings', 'to', 'query']) 

if item in ser.values: 
    # do stuff 
0

람다 함수를 사용하십시오.

의 당신이 배열이 있다고 가정 해 봅시다 : 5 nums

nums = [0,1,5] 

확인 여부 :

(len(filter (lambda x : x == 5, nums)) > 0) 

이 솔루션은 더 강력하다. 특정 조건을 만족하는 숫자가 배열 nums에 있는지 여부를 확인할 수 있습니다.

예를 들어,보다 크거나 5와 동일한 숫자가 nums에 존재하는지 여부를 확인합니다

(len(filter (lambda x : x >= 5, nums)) > 0) 
0

당신은 배열에 대한 .values을 사용해야합니다. 예를 들어 는 .values를 사용해야합니다, 당신은 그나마 정상적인 목록

if name in test['Name'].values : 
    print(name) 

을 할 수있는 당신이 열 이름 즉, 테스트 [ '이름']이 dataframe이 있다고

관련 문제