2014-03-03 5 views
0

나는 튜플의 목록이있는 경우 :튜플 목록의 특정 위치에 '일부 요소는'

MyList = [('name1', 'surname1', 'age1'), ('name2', 'surname2', 'age2'), ...] 

내가으로 myList에 체크 "만약 'NAME2'을하고 싶습니다, 같은 :

if 'name2' in MyList[?][0]: 
    print "do something" 

내가 요소를 ('NAME1', 'surname1', 'age1')를 액세스하는 것 if 'name2' in MyList[0]을 작성하면 내가 무엇을 의미하는 것은 목록에있는 모든 튜플의 위치 0 에게 요소에 액세스하는 동안 . 내가 할 수있는 syntaxis 것 같아요하지만 난 초보자 및 찾을 수 없습니다. 나를 직접 도와 줄 사람이 있겠 니?

답변

2

당신은 반복하면서 튜플의 모든 요소가 name, surname, age에 패킹이 여기에

if any("name2" in name for name, surname, age in my_list): 
    # do something 

같은 any 함수와 함수 발생기를 사용할 수있다. 따라서 name2이 있는지 여부를 간단히 확인할 수 있습니다. 이것은 항목의 나머지 부분을 체크 할 필요는 경기가 후 즉시 True을 산출로이, 효율적입니다

if any("name2" in current_item[0] for current_item in my_list): 

를 작성하는 것과 동일합니다.

두 개의 문자열을 비교하는 방법을 찾고 있다면,이

if any("name2" == name for name, surname, age in my_list): 
# do something 
+0

왜 'name2'in name '입니까? 'name2'== name '이 아니어야합니까? –

+0

@JayanthKoushik 그 질문에 그가 무엇을 가지고 있습니다. 나는이 제안을 답에도 포함시킬 것이다. – thefourtheye

1

처럼 == 연산자를 사용한다는 사용 사전 혜택을 누릴 수 있다는 소리 : 그럼

my_dict = dict((x[0],(x[1],x[2])) for x in MyList) 

당신 존재 여부 확인 my_dict['names2']

+0

성을 비교하기위한 새로운 dict와 연령 비교를위한 새로운 dict을 생성해야하는 문제가있을 수 있습니다. 손을 놓을 수도 있습니다. – Guy

1

가장 많은 전자 메일인지 확실하지 않습니다. fficient 방법이지만, 이것을 사용할 수 있습니다.

>>>MyList = [('name1', 'surname1', 'age1'), ('name2', 'surname2', 'age2'), ...] 
>>> if 'name2' in zip(*MyList)[0]: 
       #do something. 

요점은 원래 목록의 전치를 작성한다는 것입니다. 주의 사항 : 데이터가 손실되지 않도록 모든 튜플의 길이가 동일해야합니다.

편집 : 공식 docs for zip.

공식 docs*에 대한 연산자는 언팩 인수 목록에 사용됩니다.

관련 문제