2013-02-13 3 views
4

튜플을 포함하는 중첩 목록이있는 목록이 있습니다. 목록은 다음과 같습니다 :중첩 목록의 튜플 요소에 액세스하는 방법

428 [(' whether', None), (' mated', None), (' rooster', None), ('', None)] 
429 [(' produced', None), (' without', None), (' rooster', None), (' infertile', None), ('', None)] 

인덱스 값 당 튜플의 "없음"요소에 액세스하고 싶습니다. 내가 좋아 보일 것 같은 인덱스 값으로 새로운 목록을 만들 싶습니다. 난 정말 "없음"을 입력하지하든 상관하지 않습니다

428 [(None, None, None, None)] 
429 [(None, None, None, None, None)] 

난 그냥 별도의리스트로 원하는입니다.

목록 내장을 시도했지만 내부 요소가 아닌 튜플 자체 만 검색 할 수 있습니다.

도움을 주시면 감사하겠습니다.

+0

실제리스트 (우리가 인터프리터에 입력 할 수있는 파이썬 목록 디스플레이)를 보여줄 수 있습니까? 그것 [428, [(...)], 429, [(...)], ...)'입니까? 아니면 다른 무엇입니까? – abarnert

+3

예제에서 "없음"은 항상 튜플의 두 번째 값입니다. 그럴 경우 [myList의 x에 대해 x [1]을 할 수 있습니다.] –

+2

또한 'tuple' 만 검색 할 수있는 목록 이해력은 무엇입니까? 표현의 끝 부분에'[1]'을 붙이지 않아도되는 이유가 있을까요? – abarnert

답변

8

간단한 단 하나의 목록이 포함 된 튜플이 될 것이기 :

[x[-1] for x in myList] 
# [None, None, None, None] 

참고 :

[x[1] for x in myList] 
# [None, None, None, None] 

또는을 (이 두 개 이상의 값을 포함하는 경우) 항상 튜플의 마지막 값의 경우 아래의 예제는 중첩 목록을 사용하고 있습니다. 튜플을 포함하는 목록입니다. 나는 당신이 목록의 두 가지 변형을 보여 주었던 이래로 당신이 찾고 있던 것이라고 생각했습니다.

중첩 된 이해 목록 사용을 참조 또한

myList =[ [(None, None), (' mated', None), (' rooster', None), ('', None)] , 
       [(' produced', None), (' without', None), (' rooster', None), (' infertile', None), ('', None)] ] 

# If there are multiple none values (if the tuple isn't always just two values) 
print [ [ [ x for x in z if x == None] for z in el ] for el in myList ] 
# [[[None, None], [None], [None], [None]], [[None], [None], [None], [None], [None]]] 

# If it's always the last value in the tuple 
print [[x[-1] for x in el] for el in myList] 
# [[None, None, None, None], [None, None, None, None, None]] 

:

myList =[ [(' whether', None), (' mated', None), (' rooster', None), ('', None)] , 
      [(' produced', None), (' without', None), (' rooster', None), (' infertile', None), ('', None)] ] 


print [[x[1] for x in el] for el in myList] 
# [[None, None, None, None], [None, None, None, None, None]] 

또는 다른 변화를 SO: Understanding nested list comprehension

+0

고마워요, 로이. 그것은 트릭을했다. – user1882766

5

목록의 요소와 마찬가지로 인덱스 사용과 동일한 방법으로 튜플 내부의 요소를 처리 할 수 ​​있습니다. 예를 들어 :

lst = [1, (2, 3)] 
lst[1][1] # first index accesses tuple, second index element inside tuple 
=> 3 
+0

나는 실제로 Roy가 제안한 목록 이해력을 시도했다. 그러면 모든 튜플을 하나의 큰 목록에 넣을 수 있습니다. Oscar가 설명한 방법을 사용하는 경우 목록의 첫 번째 튜플 만 검색합니다. – user1882766

+0

@ user1882766 : 실제 목록과 시도한 실제 목록 이해력을 제공해야합니다. 우리에게 모호한 설명 만 주면, 우리는 모두 당신의 체계적인 이해력과 모든 지표 등을 어디에서 추측 할 것인가를 추측하며, 우리는 틀린 것을 추측 할 것입니다. – abarnert

+1

@ user1882766 전체 목록을 처리하기 위해 목록 내의 튜플에있는 요소에 액세스하는 방법을 보여줄뿐입니다. 1) 올바르게 구성된 목록을 제공해야합니다. (질문의 코드에는 해당되지 않습니다.) 2) 목록 이해력 또는 다른 루핑 메커니즘이있는 각 요소를 반복해야합니다. –

0

당신은 그냥 튜플에있는 경우 None을 얻고 싶은 경우. 이것은이있는 각 튜플에 대한 None을 포함하는 튜플을 다시 것

tuple([None for t in list if None in t])

이 있습니다 # None의 총 수를 원한다면 좋은 해결책이 아닙니다.

0

실제로 보여준 것은 실제로 목록이 아니며 실제 목록이 무엇인지 추측하기 어렵습니다.

list_o_lists = [428, 
[(' whether', None), (' mated', None), (' rooster', None), ('', None)], 
429, 
[(' produced', None), 
    (' without', None), 
    (' rooster', None), 
    (' infertile', None), 
    ('', None)]] 

그 내의 튜플에 액세스하는 모든 지능형리스트가 이미 꽤 무서운 될 것입니다 : :하지만이 같은 뭔가 생각하는거야

[[tup for tup in lst] if is_sequence(lst) else lst for lst in list_o_lists] 

그러나 두 번째에 액세스하도록 수정 각 튜플의 요소는 사소한 없습니다 :

[[tup[1] for tup in lst] if is_sequence(lst) else lst for lst in list_o_lists] 

정말, 상관없이 당신의 지능형리스트는 상관없이, 당신의 질문에 따라, 어딘가 각 튜플로있어 방법 끔찍한,없는 것 당신이해야만하는 모든 것은 그 표현에 [1]을 넣는 것입니다. 귀하의 코멘트에서


:

죄송합니다, 숫자 인덱스 값입니다. 물론

[[tup for tup in lst] for lst in list_o_lists] 

이것은 단지 추측입니다 :

list_o_lists = [ 
[(' whether', None), (' mated', None), (' rooster', None), ('', None)], 
[(' produced', None), 
    (' without', None), 
    (' rooster', None), 
    (' infertile', None), 
    ('', None)]] 

다음 시도 지능형리스트 아마 이런 일이었다

내가 생각 당신은 실제로 간단하게 뭔가를 아직 실제 목록이나 시도한 목록 이해력을 표시하지 않았기 때문에그러나 위에서 말했듯이 : "... 당신의 목록을 이해하는 것이 어딘가에 ... 식으로 각 튜플을 구한 것입니다. 즉, 당신이해야 할 일은 그 표현에 [1]을 넣는 것입니다."

그래서,이 사람은 위의 하나로서 변화만큼이나 간단하다

[[tup[1] for tup in lst] for lst in list_o_lists] 

그리고 그것은 당신이 실제로 무슨 아니라면, 당신은 실제로 그냥 쉽게 될 것 가지고 그 다음 어떤 변경 . 그러나 당신은 당신 자신의 코드를 가지고있는 동안 마음을 읽을 수있는 반복적 인 시도에 모두 실패했기 때문에 스스로해야 할 것입니다.

+0

죄송합니다. 숫자는 색인 값입니다. "Nones"를 같은 지수에 보관하고 싶기 때문에 포함 시켰습니다. – user1882766

0

사용 지퍼를 가진 * 인수에 목록을 확장합니다 :

x = [(' whether', None), (' mated', None), (' rooster', None), ('', None)] 
stuff, nones = zip(*x) 
# prints: stuff 
#(' whether', ' mated', ' rooster', '') 
print nones 
# prints: (None, None, None, None) 
*

지퍼 목록에 모든 인수의 첫 번째 요소를리스트의 무리를 복용하여 작동하고 (우편을 상상할 수 있도록 목록에 두 번째 인수 요법

별표 (*)가 목록을 확장 (x [0], x [1], x [2], ... x [n])

0

428과 429는 색인에없는 것으로 가정합니다.

그래서, 일을 할 것입니다 질문

li = [[(' whether', None), (' mated', None), 
     (' rooster', None), ('', None)], 

     [(' produced', None), (' without', None), 
     (' rooster', None), (' infertile', None), 
     ('', None)] 

     ] 


print [ [len(subli)*(None,)] for subli in li] 

을 부여.

[[(None, None, None, None)], [(None, None, None, None, None)]] 

귀하의 질문은 이상합니다. 그러한 데이터의 사용은 무엇입니까?

관련 문제